---
title: "Get org branding."
method: GET
path: "/v1/orgs/{orgId}/branding"
tags: ["dashboards"]
---

# Get org branding.

`GET /v1/orgs/{orgId}/branding`

## Request

- Base URL: `http://localhost:8080`
- URL: `http://localhost:8080/v1/orgs/{orgId}/branding`
- Auth: one of:
  - API key in cookie `dvt_session`
  - HTTP bearer

Returns the organization's branding configuration. Any member may read branding
(no role restriction — same as the activity feed). Absent row returns all-null fields.

## Response `200`

The org's branding configuration.

- object
  - `data` OrgBranding, required: Per-org co-branded tenant chrome (ADR-0037 / DVT-327). All fields are nullable — null means "use dvt default". Absent row (never-configured org) also returns all nulls. Logo fields hold resolved URLs (DVT-328/DVT-394); null when no logo has been uploaded. When org-branding asset serving is configured (BRANDING_ASSETS_BASE_URL), the URL is a public CDN URL. Otherwise it is a time-limited presigned GET URL (valid 24 h).
    - `appName` string, nullable: Custom application name shown in the nav chrome (replaces "dvt").
    - `accentColor` string, nullable: Primary accent color — a hex/rgb()/hsl() literal, CSS named color, or {token.ref}. CSS resource functions (url(), image-set()) are rejected (ADR-0032 §2).
    - `logoLight` string, nullable: URL for the light-mode logo; null when no logo is set. A public CDN URL when org-branding asset serving is configured, otherwise a time-limited presigned URL.
    - `logoDark` string, nullable: URL for the dark-mode logo; null when no logo is set. A public CDN URL when org-branding asset serving is configured, otherwise a time-limited presigned URL.
    - `themeTokens` object, nullable: Theme-token overrides gated by ThemeTokenMap (ADR-0032 §A3, DVT-294): color keys are default-deny ColorTokenValue, .family/fontFamily keys are the closed font-stack enum, dimensional/typographic keys stay loose TokenValue.
    - `homeTarget` object, nullable: Custom home-page target — kind + reference (DVT-332 owns resolution). Null means the default org home page.
    - `defaultAppearance` 'light', nullable: Org-level default appearance. Light only (the dark app shell was removed, DVT-5272); null means light.
    - `logoScale` number, float, nullable: Header-logo size multiplier (1.0 = default). Null means "use dvt default" (1.0). Lets wide wordmark logos render larger.
    - `accentGradient` AccentGradient: N-stop gradient accent (ADR-0037 / DVT-332). A single angle applies to the whole gradient; 2–8 stops each carry a color and a 0–100 position. Structure + per-stop color safety are validated server-side (spec.ValidateAccentGradient reuses the solid accent's ColorTokenValue gate, so url()/image-set() sinks are rejected). Render-time legibility (white text on the lightest stop) is a client-side gate, not stored here.
      - `angle` number, required: Gradient angle in degrees (CSS linear-gradient convention).
      - `stops` object[], required: Color stops, 2–8 entries.
        - `color` string, required: Stop color — hex/rgb()/hsl() literal, CSS named color, or {token.ref}; CSS resource functions (url(), image-set()) are rejected (ADR-0032 §2).
        - `at` number, required: Stop position as a percentage (0–100).
    - `chromeTextColor` string, nullable: Manual override for the header/sidebar foreground text (DVT-332) — a hex/rgb()/hsl() literal, CSS named color, or {token.ref}; url()/image-set() rejected (ADR-0032 §2). Null = auto (white or near-black picked by the accent's luminance).
    - `showAppName` boolean, nullable: Whether the product name renders in the header alongside a logo (DVT-332). Null = default (true).
    - `updatedAt` string, date-time, nullable: When branding was last updated. Null when no row has been written yet.
  - `meta` Meta, required: Response metadata.
    - `requestId` string, required: Correlates with the X-Request-Id header.
    - `total` integer: Item count, present on collection responses.
    - `nextCursor` string, nullable: Opaque keyset-pagination cursor, present on paginated responses (e.g. GET /v1/dashboards) when more rows exist beyond this page. Pass it back as the `cursor` query param to fetch the next page; absent or null on the last page.
    - `roleResolveDegraded` boolean: Snowflake mode only (DVT-2260), on GET /v1/dashboards: present and true when the caller's live Snowflake role resolution failed or was unavailable — role-shared dashboards may be missing from this page. Omitted (not merely false) whenever resolution succeeded or the role-share arm does not apply (off snowflake mode, an org admin/owner, or off the ingress listener).

## Other responses

- `401`: Missing, invalid, or expired session.
- `404`: Resource does not exist.

---

[API](https://skmtc.dev/dvt/apis/dvt-rest-api.md) · [All operations](https://skmtc.dev/dvt/apis/dvt-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/dvt/apis/dvt-rest-api/revisions/00016f504165?raw)
