Skip to content

Introduce a /design endpoint to replace /branding endpoint #1274

@brionmario

Description

@brionmario

Current Limitation

The existing /branding API is used for both management (CRUD) and runtime consumption during authentication flows.

This creates several problems:

  • The term branding is misleading for what is effectively UI theming and layout configuration.
  • The API is not designed as a runtime presentation contract.
  • Frontend clients and SDKs must combine /branding with other APIs to render sign-in, sign-up, and recovery flows.
  • Resolution and precedence logic (application vs OU) leaks into client implementations.
  • Tight coupling between runtime experiences and management-focused APIs results in poor DX and inconsistency.

Suggested Improvement

Introduce a new runtime-focused /design endpoint to replace /branding for authentication flow consumption.

The /design endpoint should:

  • Serve as the single source of truth for runtime UI presentation metadata
  • Return fully resolved theme and layout definitions
  • Use clear domain terminology aligned with design systems and component-driven identity
  • Be safe for pre-auth, public access, and cacheable
  • Be referenced by aggregated runtime endpoints such as /flow/meta
  • Decouple runtime consumption from management APIs

/branding/themes

{
    "totalResults": 1,
    "startIndex": 1,
    "count": 1,
    "themes": [
        {
            "id": "da509d15-1fa6-4d0d-a838-926f93298d45",
            "displayName": "Dracula"
        }
    ],
    "links": []
}

/branding/themes/:id

{
    "id": "da509d15-1fa6-4d0d-a838-926f93298d45",
    "displayName": "Dracula",
    "preferences": {
        "direction": "ltr",
        "defaultColorScheme": "dark",
        "colorSchemes": {
            "light": {
                "colors": {
                    "primary": {
                        "main": "#BD93F9",
                        "dark": "#9A7FD1",
                        "contrastText": "#1E1F29"
                    },
                    "secondary": {
                        "main": "#FF79C6",
                        "dark": "#E56FB3",
                        "contrastText": "#1E1F29"
                    },
                    "background": {
                        "default": "#F8F8F2",
                        "paper": "#FFFFFF"
                    },
                    "text": {
                        "primary": "#1E1F29",
                        "secondary": "#44475A"
                    }
                }
            },
            "dark": {
                "colors": {
                    "primary": {
                        "main": "#FF79C6",
                        "dark": "#E56FB3",
                        "contrastText": "#282A36"
                    },
                    "secondary": {
                        "main": "#8BE9FD",
                        "dark": "#6FDCEB",
                        "contrastText": "#282A36"
                    },
                    "background": {
                        "default": "#282A36",
                        "paper": "#343746"
                    },
                    "text": {
                        "primary": "#F8F8F2",
                        "secondary": "#6272A4"
                    }
                }
            }
        },
        "shape": {
            "borderRadius": "8px"
        },
        "typography": {
            "fontFamily": "'Roboto', sans-serif"
        }
    }
}

Version

0.20.0

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions