curl https://vedaya-kge.fly.dev/branding/config
{
  "brand": {
    "name": "Vedaya",
    "tagline": "AI-Powered Knowledge Management",
    "description": "Enterprise knowledge platform"
  },
  "assets": {
    "logo": {
      "light": "https://example.com/logo-light.svg",
      "dark": "https://example.com/logo-dark.svg",
      "favicon": "https://example.com/favicon.ico"
    },
    "colors": {
      "primary": "#007BFF",
      "secondary": "#6C757D",
      "accent": "#28A745"
    }
  },
  "links": {
    "documentation": "https://docs.vedaya.ai",
    "support": "https://support.vedaya.ai"
  },
  "metadata": {
    "title": "Vedaya Knowledge Base",
    "description": "Enterprise knowledge management powered by AI",
    "keywords": ["knowledge", "AI", "enterprise"]
  },
  "version": "1.0.0",
  "updated_at": "2024-01-01T00:00:00Z"
}
The Branding Configuration API allows you to customize the visual appearance, logos, colors, and metadata of your Vedaya instance.

Quick Start

import requests

# No authentication needed for basic retrieval!
API_BASE_URL = "https://vedaya-kge.fly.dev"

# Get current branding
response = requests.get(f"{API_BASE_URL}/branding/config")
if response.status_code == 200:
    config = response.json()
    print(f"Brand name: {config.get('brand', {}).get('name', 'Vedaya')}")

Get Branding Configuration

Retrieve the current branding configuration.
curl https://vedaya-kge.fly.dev/branding/config
{
  "brand": {
    "name": "Vedaya",
    "tagline": "AI-Powered Knowledge Management",
    "description": "Enterprise knowledge platform"
  },
  "assets": {
    "logo": {
      "light": "https://example.com/logo-light.svg",
      "dark": "https://example.com/logo-dark.svg",
      "favicon": "https://example.com/favicon.ico"
    },
    "colors": {
      "primary": "#007BFF",
      "secondary": "#6C757D",
      "accent": "#28A745"
    }
  },
  "links": {
    "documentation": "https://docs.vedaya.ai",
    "support": "https://support.vedaya.ai"
  },
  "metadata": {
    "title": "Vedaya Knowledge Base",
    "description": "Enterprise knowledge management powered by AI",
    "keywords": ["knowledge", "AI", "enterprise"]
  },
  "version": "1.0.0",
  "updated_at": "2024-01-01T00:00:00Z"
}

Update Branding Configuration

Update the branding configuration for your instance.
brand
object
Brand information
name
string
required
Company/instance name (1-50 characters)
tagline
string
Short tagline (max 100 characters)
description
string
Longer description (max 500 characters)
assets
object
Visual assets configuration
Logo URLs or base64 data
colors
object
Hex color codes for branding
External links
metadata
object
required
SEO metadata
title
string
required
Page title (1-100 characters)
description
string
required
SEO description (1-500 characters)
keywords
array
SEO keywords (max 10)
{
  "brand": {
    "name": "My Company",
    "tagline": "Your AI Knowledge Platform",
    "description": "Powered by Vedaya"
  },
  "assets": {
    "logo": {
      "light": "https://example.com/logo-light.svg",
      "dark": "https://example.com/logo-dark.svg",
      "favicon": "https://example.com/favicon.ico"
    },
    "colors": {
      "primary": "#007BFF",
      "secondary": "#6C757D",
      "accent": "#28A745"
    }
  },
  "links": {
    "documentation": "https://docs.mycompany.com",
    "support": "https://support.mycompany.com"
  },
  "metadata": {
    "title": "My Company Knowledge Base",
    "description": "Enterprise knowledge management powered by AI",
    "keywords": ["knowledge", "AI", "enterprise"]
  }
}
{
  "brand": {
    "name": "My Company",
    "tagline": "Your AI Platform",
    "description": "Powered by Vedaya"
  },
  "assets": {
    "logo": {
      "light": "https://example.com/logo.svg"
    },
    "colors": {
      "primary": "#007BFF",
      "secondary": "#6C757D",
      "accent": "#28A745"
    }
  },
  "metadata": {
    "title": "My Knowledge Base",
    "description": "AI-powered knowledge management"
  },
  "version": "1.0.0",
  "updated_at": "2024-01-01T00:00:00Z"
}

Validate Configuration

Validate a branding configuration without saving it.
Request body is the same as the update configuration endpoint.
{
  "valid": true,
  "message": "Configuration is valid"
}

Upload Asset

Upload a branding asset (logo, favicon, etc.).
asset_type
string
required
Type of asset (logo_light, logo_dark, favicon)
file
file
required
The file to upload (SVG, PNG, JPG, ICO)
curl -X POST "https://vedaya-kge.fly.dev/branding/assets?asset_type=logo_light" \
  -F "file=@logo.svg"
{
  "id": "asset_123",
  "type": "logo_light",
  "url": "https://vedaya-kge.fly.dev/assets/logo_123.svg",
  "mime_type": "image/svg+xml",
  "size": 4096,
  "uploaded_at": "2024-01-01T00:00:00Z"
}

Get Asset

Retrieve a specific branding asset by ID.
asset_id
string
required
Unique identifier of the asset
{
  "id": "asset_123",
  "type": "logo_light",
  "url": "https://vedaya-kge.fly.dev/assets/logo_123.svg",
  "mime_type": "image/svg+xml",
  "size": 4096,
  "uploaded_at": "2024-01-01T00:00:00Z"
}

Delete Asset

Remove a branding asset.
DELETE /branding/assets/{asset_id}

Path Parameters

ParameterTypeDescription
asset_idstringUnique identifier of the asset

Response

Returns confirmation of deletion.

Color Format

All colors must be specified as 6-character hex codes (e.g., #007BFF). The system validates:
  • Primary color: Main brand color
  • Secondary color: Supporting color
  • Accent color: Highlight/action color

Logo Requirements

Logos can be provided as:
  1. URLs: Direct links to hosted images
  2. Base64: Embedded image data
  3. Uploaded files: Via the asset upload endpoint
Supported formats: SVG (recommended), PNG, JPG, ICO (for favicon)

Working Example: Complete Branding Workflow

Here’s a practical example of customizing your Vedaya instance:
import requests
import json

# API Configuration
API_BASE_URL = "https://vedaya-kge.fly.dev"
API_KEY = "sk-your-api-key"  # Optional

headers = {"Content-Type": "application/json"}
if API_KEY and API_KEY != "sk-mock-dummy-key":
    headers["Authorization"] = f"Bearer {API_KEY}"

# 1. Get current branding configuration
response = requests.get(f"{API_BASE_URL}/branding/config")
if response.status_code == 200:
    current_config = response.json()
    print(f"Current brand: {current_config.get('brand', {}).get('name', 'Vedaya')}")

# 2. Update branding configuration
new_config = {
    "brand": {
        "name": "Acme Corp",
        "tagline": "Intelligence at Scale",
        "description": "Acme Corp's enterprise knowledge management platform"
    },
    "assets": {
        "logo": {
            "light": "https://cdn.acme.com/logo-light.svg",
            "dark": "https://cdn.acme.com/logo-dark.svg",
            "favicon": "https://cdn.acme.com/favicon.ico"
        },
        "colors": {
            "primary": "#1E40AF",
            "secondary": "#64748B",
            "accent": "#10B981"
        }
    },
    "links": {
            "documentation": "https://docs.acme.com",
        "support": "https://support.acme.com"
    },
    "metadata": {
        "title": "Acme Knowledge Base",
        "description": "Enterprise AI-powered knowledge management and retrieval",
        "keywords": ["knowledge", "AI", "enterprise", "acme"]
    }
}

# 3. Validate configuration first (optional)
validate_response = requests.post(
    f"{API_BASE_URL}/branding/validate",
    headers=headers,
    json=new_config
)

if validate_response.status_code == 200:
    print("✅ Configuration is valid")
    
    # 4. Apply the configuration
    update_response = requests.post(
        f"{API_BASE_URL}/branding/config",
        headers=headers,
        json=new_config
    )
    
    if update_response.status_code == 200:
        print("✅ Branding updated successfully")
        updated = update_response.json()
        print(f"New brand name: {updated.get('brand', {}).get('name')}")

# 5. Upload a custom logo (if needed)
# with open('logo.svg', 'rb') as f:
#     upload_response = requests.post(
#         f"{API_BASE_URL}/branding/assets",
#         headers={"Authorization": f"Bearer {API_KEY}"} if API_KEY else {},
#         params={'asset_type': 'logo_light'},
#         files={'file': f}
#     )
#     if upload_response.status_code == 200:
#         asset_url = upload_response.json().get('url')
#         print(f"Logo uploaded: {asset_url}")
This workflow will:
  • Retrieve current branding
  • Validate your new configuration
  • Update the branding (auth may be required)
  • Display “Acme Corp” as the brand name
  • Use custom logos for light/dark themes
  • Apply a blue/gray/green color scheme
  • Set appropriate SEO metadata
  • Link to company resources