---
title: "Resolve the complete Workspace theme"
method: GET
path: "/themes/resolved"
tags: ["Organization Themes"]
---

# Resolve the complete Workspace theme

`GET /themes/resolved`

## Request

- Base URL: `https://app.openpo.st/api/v1`
- URL: `https://app.openpo.st/api/v1/themes/resolved`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `openpost_session`

Returns one complete manifest. Resolution precedence: locked or missing Workspace selection inherits the Organization default; the default falls back to Workshop. Missing, invalid, unpublished, deleted, inaccessible, or unsupported references fall back as a whole to Workshop with a fallbackReason; the response never mixes schemes or token sources. Cache identity is source:id:version:scheme (fallbacks additionally key on reason) and served as ETag. Native clients: token values use web CSS value syntax (px/rem/em/%, ms/s, oklch(), color-mix(), cubic-bezier); map them to platform values (16px root, hex8 color, millisecond durations, closed recipe enums) and validate the result before staging. Resource URLs are same-origin /api/v1/theme-assets/{id}/content scoped by workspace_id, theme_id, and revision with optional ttf/otf font derivatives.

## Query parameters

- `workspace_id` string, required: Workspace ID
- `scheme` 'light' | 'dark', required: Effective light or dark scheme already chosen from the user's system preference

## Headers

- `If-None-Match` string: Resolved theme cache identity

## Response `200`

OK

- ResolvedTheme
  - `$schema` string, uri: A URL to the JSON Schema for this object.
  - `assets` ThemeAsset[], required
    - `alt` string
    - `id` string, required
    - `mimeType` 'image/png' | 'image/jpeg' | 'image/webp' | 'image/avif', required
    - `slot` 'background-texture' | 'sidebar-decoration' | 'header-decoration' | 'empty-state-illustration' | 'loading-illustration', required
    - `sourceUrl` string, required
  - `fallbackReason` 'missing-theme' | 'invalid-manifest' | 'unsafe-resource' | 'unsupported-scheme' | 'resource-failed'
  - `fonts` ThemeRuntimeFontFace[], required
    - `display` 'swap' | 'fallback' | 'optional', required
    - `family` string, required
    - `format` 'woff2', required
    - `id` string, required
    - `nativeDerivative` NativeFontDerivative, required
      - `format` 'ttf' | 'otf', required
      - `identity` string, required
      - `sourceUrl` string, required
    - `sourceUrl` string, required
    - `style` 'normal' | 'italic', required
    - `weight` integer, required
  - `iconPack` 'lucide' | 'heroicons-outline' | 'heroicons-solid' | 'phosphor' | 'tabler', required
  - `id` string, required
  - `manifest` ThemeSchemeManifest, required
    - `colors` ThemeColorTokens, required
      - `actionDestructive` string, required
      - `actionDestructiveActive` string, required
      - `actionDestructiveHover` string, required
      - `actionDestructiveInk` string, required
      - `actionFocal` string, required
      - `actionFocalActive` string, required
      - `actionFocalHover` string, required
      - `actionFocalInk` string, required
      - `actionLink` string, required
      - `actionLinkHover` string, required
      - `actionOrdinary` string, required
      - `actionOrdinaryActive` string, required
      - `actionOrdinaryBorder` string, required
      - `actionOrdinaryHover` string, required
      - `actionOrdinaryInk` string, required
      - `actionPrimary` string, required
      - `actionPrimaryActive` string, required
      - `actionPrimaryHover` string, required
      - `actionPrimaryInk` string, required
      - `actionQuiet` string, required
      - `actionQuietActive` string, required
      - `actionQuietHover` string, required
      - `actionQuietInk` string, required
      - `border` string, required
      - `brand` string, required
      - `brandInk` string, required
      - `browserChrome` string, required
      - `browserSurface` string, required
      - `canvas` string, required
      - `cardHover` string, required
      - `caret` string, required
      - `chart1` string, required
      - `chart2` string, required
      - `chart3` string, required
      - `chart4` string, required
      - `chart5` string, required
      - `chrome` string, required
      - `chromeInk` string, required
      - `danger` string, required
      - `dangerInk` string, required
      - `disabled` string, required
      - `disabledInk` string, required
      - `field` string, required
      - `fieldBorder` string, required
      - `fieldDisabled` string, required
      - `fieldDisabledInk` string, required
      - `fieldFocus` string, required
      - `fieldHover` string, required
      - `fieldInk` string, required
      - `focus` string, required
      - `info` string, required
      - `infoInk` string, required
      - `ink` string, required
      - `input` string, required
      - `link` string, required
      - `mutedInk` string, required
      - `navigationActive` string, required
      - `navigationActiveInk` string, required
      - `navigationHover` string, required
      - `overlay` string, required
      - `scrim` string, required
      - `selection` string, required
      - `selectionInk` string, required
      - `sidebar` string, required
      - `sidebarActive` string, required
      - `sidebarActiveInk` string, required
      - `sidebarBorder` string, required
      - `sidebarInk` string, required
      - `success` string, required
      - `successInk` string, required
      - `surface` string, required
      - `surfaceRaised` string, required
      - `surfaceSunken` string, required
      - `warning` string, required
      - `warningInk` string, required
      - `workspace` string, required
      - `workspaceInk` string, required
    - `components` ThemeComponentRecipes, required
      - `badge` 'solid' | 'tonal' | 'outlined', required
      - `button` 'solid' | 'tonal' | 'outlined' | 'precise' | 'pill' | 'dither', required
      - `card` 'flat' | 'outlined' | 'paper' | 'lifted' | 'dither', required
      - `checkbox` 'solid' | 'tonal' | 'outlined', required
      - `chip` 'solid' | 'tonal' | 'outlined', required
      - `container` 'flat' | 'outlined' | 'tinted', required
      - `decoration` 'none' | 'editorial' | 'playful' | 'botanical' | 'study' | 'tactile' | 'precision' | 'dither', required
      - `dialog` 'flat' | 'outlined' | 'elevated', required
      - `editorChrome` 'neutral' | 'compact' | 'precision', required
      - `emptyState` 'plain' | 'illustrated' | 'framed', required
      - `input` 'filled' | 'outlined' | 'underlined', required
      - `link` 'underlined' | 'subtle' | 'plain', required
      - `list` 'divided' | 'spaced' | 'plain', required
      - `loadingState` 'spinner' | 'pulse' | 'skeleton', required
      - `navigation` 'quiet' | 'tonal' | 'outlined', required
      - `pagination` 'quiet' | 'outlined' | 'pill', required
      - `popover` 'flat' | 'outlined' | 'elevated', required
      - `radio` 'solid' | 'tonal' | 'outlined', required
      - `select` 'filled' | 'outlined' | 'underlined', required
      - `switch` 'solid' | 'tonal' | 'outlined', required
      - `table` 'ruled' | 'striped' | 'plain', required
      - `tabs` 'underline' | 'pill' | 'segmented', required
      - `toast` 'flat' | 'outlined' | 'elevated', required
      - `toolbar` 'flat' | 'outlined' | 'floating', required
    - `elevation` ThemeElevationTokens, required
      - `card` string, required
      - `dialog` string, required
      - `focalAction` string, required
      - `popover` string, required
    - `motion` ThemeMotionTokens, required
      - `entry` ThemeMotionRecipe, required
        - `distance` string, required
        - `duration` string, required
        - `easing` string, required
        - `opacity` number, double, required
      - `exit` ThemeMotionRecipe, required
        - `distance` string, required
        - `duration` string, required
        - `easing` string, required
        - `opacity` number, double, required
      - `hover` ThemeMotionRecipe, required
        - `distance` string, required
        - `duration` string, required
        - `easing` string, required
        - `opacity` number, double, required
      - `loading` ThemeMotionRecipe, required
        - `distance` string, required
        - `duration` string, required
        - `easing` string, required
        - `opacity` number, double, required
      - `pageTransition` ThemeMotionRecipe, required
        - `distance` string, required
        - `duration` string, required
        - `easing` string, required
        - `opacity` number, double, required
      - `press` ThemeMotionRecipe, required
        - `distance` string, required
        - `duration` string, required
        - `easing` string, required
        - `opacity` number, double, required
      - `reducedMotion` 'instant' | 'crossfade', required
      - `selection` ThemeMotionRecipe, required
        - `distance` string, required
        - `duration` string, required
        - `easing` string, required
        - `opacity` number, double, required
    - `protectedEditor` ThemeProtectedEditorTokens, required
      - `canvasGrid` string, required
      - `canvasHandle` string, required
      - `canvasPasteboard` string, required
      - `canvasSafeArea` string, required
      - `canvasSelection` string, required
      - `editorBorder` string, required
      - `editorCanvas` string, required
      - `editorControl` string, required
      - `editorControlHover` string, required
      - `editorFocus` string, required
      - `editorFocusBorder` string, required
      - `editorMuted` string, required
      - `editorPanel` string, required
      - `editorText` string, required
      - `protectedGlyph` string, required
      - `timelineClip` string, required
      - `timelinePlayhead` string, required
      - `timelineSelection` string, required
      - `timelineTrack` string, required
      - `timelineWaveform` string, required
    - `shape` ThemeCornerTokens, required
      - `borderStyle` 'solid' | 'dashed', required
      - `borderWidth` string, required
      - `radius` string, required
      - `radiusLg` string, required
      - `radiusMd` string, required
      - `radiusMedia` string, required
      - `radiusPill` string, required
      - `radiusSm` string, required
    - `shell` ThemeShellTokens, required
      - `canvasTreatment` 'plain' | 'paper' | 'playful' | 'garden' | 'study' | 'tactile' | 'precision', required
      - `contentMaxWidth` string, required
      - `headerHeight` string, required
      - `mobileNavigationHeight` string, required
      - `sidebarWidth` string, required
    - `spacing` ThemeSpacingTokens, required
      - `base` string, required
      - `compactControlHeight` string, required
      - `componentGap` string, required
      - `controlHeight` string, required
      - `density` 'compact' | 'comfortable' | 'spacious', required
      - `pageGutter` string, required
      - `sectionGap` string, required
      - `touchTarget` string, required
    - `typography` ThemeTypographyTokens, required
      - `body` ThemeTypographyRoleTokens, required
        - `fallbacks` string[], required
        - `family` string, required
        - `lineHeight` string, required
        - `size` string, required
        - `tracking` string, required
        - `weight` integer, required
      - `code` ThemeTypographyRoleTokens, required
        - `fallbacks` string[], required
        - `family` string, required
        - `lineHeight` string, required
        - `size` string, required
        - `tracking` string, required
        - `weight` integer, required
      - `display` ThemeTypographyRoleTokens, required
        - `fallbacks` string[], required
        - `family` string, required
        - `lineHeight` string, required
        - `size` string, required
        - `tracking` string, required
        - `weight` integer, required
      - `label` ThemeTypographyRoleTokens, required
        - `fallbacks` string[], required
        - `family` string, required
        - `lineHeight` string, required
        - `size` string, required
        - `tracking` string, required
        - `weight` integer, required
      - `metadata` ThemeTypographyRoleTokens, required
        - `fallbacks` string[], required
        - `family` string, required
        - `lineHeight` string, required
        - `size` string, required
        - `tracking` string, required
        - `weight` integer, required
      - `title` ThemeTypographyRoleTokens, required
        - `fallbacks` string[], required
        - `family` string, required
        - `lineHeight` string, required
        - `size` string, required
        - `tracking` string, required
        - `weight` integer, required
  - `name` string, required
  - `requestedScheme` 'light' | 'dark', required
  - `revision` string, required
  - `scheme` 'light' | 'dark', required
  - `source` 'builtin' | 'organization' | 'fallback', required

## Other responses

- `400`: Bad Request
- `403`: Forbidden
- `422`: Unprocessable Entity
- `500`: Internal Server Error
- `503`: Service Unavailable

---

[API](https://skmtc.dev/openpo/apis/openpost-api.md) · [All operations](https://skmtc.dev/openpo/apis/openpost-api/llms.txt) · [OpenAPI document](https://skmtc.dev/openpo/apis/openpost-api/revisions/67d3964458a7?raw)
