Docs · static mirror — the interactive version loads with JavaScript.

Whitelabelling

Customize Runstack toolkit OAuth screens with your company logo, name, font, and colors for each workspace.

Source: https://runstack.engineer/docs/whitelabelling

Runstack supports whitelabelling on toolkit OAuth screens. When users link toolkits such as GitHub, Gmail, or Notion through your API keys, MCP, or @rnsk/tools, they see your workspace branding instead of the default Runstack branding.

Branding is workspace-scoped — configure it under Settings → Workspace → Whitelabel.

What gets customized

ElementDefaultWith branding
Permission text"you allow Runstack to interact…""you allow your company name to interact…"
Logo on auth screenRunstack logoYour uploaded logo
"Secured by" footerRunstack name + logoYour company name, logo, font, and text color

Both the connect screen (before OAuth) and the result screen (after OAuth success/failure) reflect your branding.

Setup

  1. Go to Settings → Workspace → Whitelabel
  2. Enter your Company name (max 100 characters) and Website link (optional)
  3. Choose a Font style — Inter, Nevera, Lora, Space Grotesk, Playfair Display, DM Sans, Outfit, or JetBrains Mono
  4. Pick a Text color for the company name in the footer
  5. Upload logo — PNG, JPG, GIF, WebP, or SVG, max 512 KB
  6. Click Save changes

The preview card shows how the OAuth connect screen will look.

How it works

When a user visits a toolkit OAuth screen (e.g. /auth/provider/github?workspaceId=...), Runstack loads branding for that workspace from the database.

The workspaceId query parameter is included automatically when connections are initiated via MCP initiate_connection or @rnsk/tools.

If no custom branding is set, the default Runstack logo and name are used.

API

Get branding (authenticated, workspace-scoped)

GET /api/branding
Authorization: Clerk session
X-Workspace-Id: <workspace-id>

Returns:

{
  "branding": {
    "companyName": "Acme Corp",
    "websiteUrl": "https://acme.com",
    "fontStyle": "display",
    "textColor": "#1f2937",
    "logoUrl": "https://...",
    "updatedAt": "2026-03-11T..."
  }
}

Update branding

PATCH /api/branding
Content-Type: application/json
Authorization: Clerk session
X-Workspace-Id: <workspace-id>

{
  "companyName": "Acme Corp",
  "websiteUrl": "https://acme.com",
  "fontStyle": "sans",
  "textColor": "#1f2937",
  "logoUrl": "https://..."
}

Upload logo

POST /api/uploads/branding
Authorization: Clerk session
X-Workspace-Id: <workspace-id>
Content-Type: multipart/form-data

file: <image>

Returns { "url": "https://..." }. Pass the URL as logoUrl when saving branding.

Public branding endpoint

GET /api/branding/workspace/:workspaceId

Returns companyName, fontStyle, textColor, and logoUrl. No authentication required — only non-sensitive branding data is exposed. Used by OAuth auth screens.

Limitations

  • Branding is per-workspace, not per-organization.
  • Only toolkit OAuth screens are branded. The main Runstack dashboard uses the default branding.
  • Logo files are stored in blob storage via the upload endpoint.