> **Building with AI coding agents?** If you're using an AI coding agent, install the official Scalekit plugin. It gives your agent full awareness of the Scalekit API — reducing hallucinations and enabling faster, more accurate code generation.
>
> - **Claude Code**: `claude plugin marketplace add scalekit-inc/claude-code-authstack && claude plugin install <auth-type>@scalekit-auth-stack`
> - **GitHub Copilot CLI**: `copilot plugin marketplace add scalekit-inc/github-copilot-authstack` then `copilot plugin install <auth-type>@scalekit-auth-stack`
> - **Codex**: run the bash installer, restart, then open Plugin Directory and enable `<auth-type>`
> - **Skills CLI** (Windsurf, Cline, 40+ agents): `npx skills add scalekit-inc/skills --list` then `--skill <skill-name>`
>
> `<auth-type>` / `<skill-name>`: `agentkit`, `full-stack-auth`, `mcp-auth`, `modular-sso`, `modular-scim` — [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Organization branding

Show each customer's logo and name on your hosted login page, admin portal, and hosted widgets.
Organization branding lets you brand the end-user-facing UI to match your customers' branding. Once enabled, Scalekit replaces your application branding with the customer's logo and name across three interfaces: the login page, admin portal, and hosted widgets. When a user from Acme Corp organization signs in, they see Acme Corp's logo and name instead of your application's logo and name.

## Where it appears

| Interface | What changes |
|---|---|
| **Login page** | Organization logo and `Login to {Organization name}` heading on the login page. |
| **Admin portal** | Organization logo in the portal header. |
| **Hosted widgets** | Organization logo in the widgets header. |

## Enable organization branding
Navigate to **Customization > Branding > Organization branding** in your Scalekit dashboard. Toggle it on and click **Save**.

   > Image: Scalekit Branding settings page with the Organization Branding toggle

Once enabled, any organization with a Logo URL shows its own logo on the interfaces above. Organizations without one continue to show your application logo, there is no broken image state.

## Set the organization's logo URL

You can set the logo for an organization by adding a logo URL via dashboard or SDK. The logo file must meet these requirements:

- **Publicly accessible URL**: Scalekit fetches the image from the URL you provide.
- **Allowed formats**: PNG, JPG, SVG, GIF.
- **Recommended minimum height**: 36px. Smaller logos may look pixelated in the login page, admin portal, and hosted widgets.

### Via dashboard
1. Navigate to **Organizations > Select the organization > Overview > Edit** in your Scalekit dashboard.
2. Add **Logo URL** for the organization and save.
> Image: Edit Organization dialog showing the Slug and Logo URL fields

### Via SDK
Use the examples below to set and remove Logo URL for an organization.

### Node.js

```bash showLineNumbers=false frame="none"
npm install @scalekit-sdk/node
```

   ### Python

```sh showLineNumbers=false frame="none"
pip install scalekit-sdk-python
```

  ### Go

```sh showLineNumbers=false frame="none"
go get -u github.com/scalekit-inc/scalekit-sdk-go
```

   ### Java

```groovy showLineNumbers=false frame="none"
/* Gradle users - add the following to your dependencies in build file */
implementation "com.scalekit:scalekit-sdk-java:2.1.3"
```

```xml showLineNumbers=false frame="none"
<!-- Maven users - add the following to your `pom.xml` -->
<dependency>
    <groupId>com.scalekit</groupId>
    <artifactId>scalekit-sdk-java</artifactId>
    <version>2.1.3</version>
</dependency>
```

#### Set logo while creating an organization

### Node.js

```javascript title="Create organization with logo"
const organization = await scalekit.organization.createOrganization(
  'Acme Corporation',
  { logoUrl: 'https://cdn.acmecorp.com/logo.png' }
);
```

### Python

```python title="Create organization with logo"
from scalekit.v1.organizations.organizations_pb2 import CreateOrganization

organization = scalekit_client.organization.create_organization(
    CreateOrganization(
        display_name='Acme Corporation',
        logo_url='https://cdn.acmecorp.com/logo.png',
    )
)
```

### Go

```go title="Create organization with logo"
logoURL := "https://cdn.acmecorp.com/logo.png"

organization, err := scalekitClient.Organization().CreateOrganization(
    ctx,
    "Acme Corporation",
    scalekit.CreateOrganizationOptions{
        LogoUrl: &logoURL,
    },
)
if err != nil {
    log.Fatal(err)
}
```

### Java

```java title="Create organization with logo"
// Requires scalekit-sdk-java v2.1.3+
CreateOrganization create = CreateOrganization.newBuilder()
    .setDisplayName("Acme Corporation")
    .setLogoUrl("https://cdn.acmecorp.com/logo.png")
    .build();

Organization organization = scalekitClient.organizations().create(create);
```

#### Set logo when updating an existing organization

### Node.js

```javascript title="Update org logo"
await scalekit.organization.updateOrganization(
  'org_12345',
  { logoUrl: 'https://cdn.acmecorp.com/logo.png' }
);
```

### Python

```python title="Update org logo"
from scalekit.v1.organizations.organizations_pb2 import UpdateOrganization

scalekit_client.organization.update_organization(
    organization_id='org_12345',
    organization=UpdateOrganization(logo_url='https://cdn.acmecorp.com/logo.png')
)
```

### Go

```go title="Update org logo"
logoURL := "https://cdn.acmecorp.com/logo.png"

scalekitClient.Organization().UpdateOrganization(
    ctx,
    "org_12345",
    &scalekit.UpdateOrganization{LogoUrl: &logoURL},
)
```

### Java

```java title="Update org logo"
// Requires scalekit-sdk-java v2.1.3+
UpdateOrganization update = UpdateOrganization.newBuilder()
    .setLogoUrl("https://cdn.acmecorp.com/logo.png")
    .build();

scalekitClient.organizations().updateById("org_12345", update);
```

#### Remove an organization's logo

Set `logo_url` to an empty string to remove a logo. The hosted interfaces fall back to your application logo immediately.

### Node.js

```javascript title="Remove org logo"
await scalekit.organization.updateOrganization(
  'org_12345',
  { logoUrl: '' }
);
```

### Python

```python title="Remove org logo"
from scalekit.v1.organizations.organizations_pb2 import UpdateOrganization

scalekit_client.organization.update_organization(
    organization_id='org_12345',
    organization=UpdateOrganization(logo_url='')
)
```

### Go

```go title="Remove org logo"
emptyURL := ""

scalekitClient.Organization().UpdateOrganization(
    ctx,
    "org_12345",
    &scalekit.UpdateOrganization{LogoUrl: &emptyURL},
)
```

### Java

```java title="Remove org logo"
// Requires scalekit-sdk-java v2.1.3+
UpdateOrganization update = UpdateOrganization.newBuilder()
    .setLogoUrl("")
    .build();

scalekitClient.organizations().updateById("org_12345", update);
```

## Show the organization's logo on the login page

For the organization's logo and `Login to {Organization name}` heading to appear, your authorization request must include `organization_id`. Without it, Scalekit has no organization in scope and the login page renders with your application branding instead.

Pass `organization_id` when building the authorization URL in your [login flow](/authenticate/fsa/implement-login/#set-up-login-flow):

### Node.js

```javascript title="Authorization URL with organization_id" ins={4}
const options = {
  scopes: ['openid', 'profile', 'email'],
  state: sessionStorage.oauthState,
  organizationId: 'org_12345',
};

const authorizationUrl = scalekit.getAuthorizationUrl(redirectUri, options);
res.redirect(authorizationUrl);
```

### Python

```python title="Authorization URL with organization_id" ins={4}
options = AuthorizationUrlOptions(
    scopes=['openid', 'profile', 'email'],
    state=session['oauth_state'],
    organization_id='org_12345',
)

authorization_url = scalekit_client.get_authorization_url(redirect_uri, options)
return redirect(authorization_url)
```

### Go

```go title="Authorization URL with organization_id" ins={4}
options := scalekit.AuthorizationUrlOptions{
    Scopes:         []string{"openid", "profile", "email"},
    State:          state,
    OrganizationId: "org_12345",
}

authorizationUrl := scalekitClient.GetAuthorizationUrl(redirectUri, options)
http.Redirect(w, r, authorizationUrl, http.StatusFound)
```

### Java

```java title="Authorization URL with organization_id" ins={4}
AuthorizationUrlOptions options = new AuthorizationUrlOptions();
options.setScopes(List.of("openid", "profile", "email"));
options.setState(state);
options.setOrganizationId("org_12345");

String authorizationUrl = scalekitClient.getAuthorizationUrl(redirectUri, options);
response.sendRedirect(authorizationUrl);
```

## Understand fallback behavior

If organization branding is enabled but an organization has no logo URL, the hosted interfaces fall back to your application logo. There is no broken image state; the feature degrades gracefully per organization.


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
