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
| Element | Default | With branding |
|---|---|---|
| Permission text | "you allow Runstack to interact…" | "you allow your company name to interact…" |
| Logo on auth screen | Runstack logo | Your uploaded logo |
| "Secured by" footer | Runstack name + logo | Your 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
- Go to Settings → Workspace → Whitelabel
- Enter your Company name (max 100 characters) and Website link (optional)
- Choose a Font style — Inter, Nevera, Lora, Space Grotesk, Playfair Display, DM Sans, Outfit, or JetBrains Mono
- Pick a Text color for the company name in the footer
- Upload logo — PNG, JPG, GIF, WebP, or SVG, max 512 KB
- 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.