Admin portal
Implement Scalekit's self-serve admin portal to let customers configure SSO and SCIM via a shareable link or embedded iframe
The admin portal provides a self-serve interface for customers to configure single sign-on (SSO) and directory sync (SCIM) connections. Scalekit hosts the portal and provides two integration methods: generate a shareable link through the dashboard or programmatically embed the portal in your application using an iframe.
For the broader customer onboarding workflow, see Onboard enterprise customers.
For self-serve management by signed-in users (members, profiles, domains, SSO, SCIM, session policy), redirect to Hosted UI widgets at /ui/. See Hosted UI widgets for when to use each option. Use the Admin portal for shareable links or iframe embeds aimed at enterprise IT admins.
Generate shareable portal link
RecommendedGenerate a shareable link through the Scalekit dashboard to give customers access to the admin portal. This method requires no code and is ideal for quick setup.
Create the portal link
- Log in to the Scalekit dashboard
- Go to Organizations
- Select the target organization
- Click Generate link to create a shareable admin portal link
The generated link follows this format:
https://your-app.scalekit.dev/magicLink/2cbe56de-eec4-41d2-abed-90a5b82286c4_pLink properties
| Property | Details |
|---|---|
| Expiration | Links expire after 7 days |
| Revocation | Revoke links anytime from the dashboard |
| Sharing | Share via email, Slack, or any preferred channel |
| Security | Anyone with the link can view and update the organization’s connection settings |
Embed the admin portal
APIEmbed the admin portal directly in your application using an iframe. This allows customers to configure SSO and SCIM without leaving your app, creating a seamless experience within your settings or admin interface.
The portal link must be generated programmatically on each page load for security. Each generated link is single-use and expires after 1 minute, though once loaded, the session remains active for up to 6 hours.
npm install @scalekit-sdk/nodepip install scalekit-sdk-pythongo get -u github.com/scalekit-inc/scalekit-sdk-go/v2/* Gradle users - add the following to your dependencies in build file */implementation "com.scalekit:scalekit-sdk-java:2.5.0"<!-- Maven users - add the following to your `pom.xml` --><dependency> <groupId>com.scalekit</groupId> <artifactId>scalekit-sdk-java</artifactId> <version>2.5.0</version></dependency>Generate portal link
Use the Scalekit SDK to generate a unique, embeddable admin portal link for an organization. Call this API endpoint each time you render the page containing the iframe.
import { Scalekit } from '@scalekit-sdk/node';
const scalekit = new Scalekit( process.env.SCALEKIT_ENVIRONMENT_URL, process.env.SCALEKIT_CLIENT_ID, process.env.SCALEKIT_CLIENT_SECRET,);
async function generatePortalLink(organizationId) { const link = await scalekit.organization.generatePortalLink(organizationId); return link.location; // Use as iframe src}from scalekit import ScalekitClientimport os
scalekit_client = ScalekitClient( env_url=os.environ.get("SCALEKIT_ENVIRONMENT_URL"), client_id=os.environ.get("SCALEKIT_CLIENT_ID"), client_secret=os.environ.get("SCALEKIT_CLIENT_SECRET"))
def generate_portal_link(organization_id): link = scalekit_client.organization.generate_portal_link(organization_id) return link.location # Use as iframe srcimport ( "context" "os"
scalekit "github.com/scalekit-inc/scalekit-sdk-go/v2")
var scalekitClient = scalekit.NewScalekitClient( os.Getenv("SCALEKIT_ENVIRONMENT_URL"), os.Getenv("SCALEKIT_CLIENT_ID"), os.Getenv("SCALEKIT_CLIENT_SECRET"),)
func generatePortalLink(organizationID string) (string, error) { ctx := context.Background() link, err := scalekitClient.Organization().GeneratePortalLink(ctx, organizationID) if err != nil { return "", err } return link.Location, nil // Use as iframe src}import com.scalekit.ScalekitClient;import com.scalekit.grpc.scalekit.v1.organizations.Link;import com.scalekit.grpc.scalekit.v1.organizations.Feature;import java.util.Arrays;
ScalekitClient scalekitClient = new ScalekitClient( System.getenv("SCALEKIT_ENVIRONMENT_URL"), System.getenv("SCALEKIT_CLIENT_ID"), System.getenv("SCALEKIT_CLIENT_SECRET"));
public String generatePortalLink(String organizationId) { Link portalLink = scalekitClient.organizations() .generatePortalLink(organizationId, Arrays.asList(Feature.sso, Feature.dir_sync)); return portalLink.getLocation(); // Use as iframe src}The API returns a JSON object with the portal link. Use the location property as the iframe src:
{ "id": "8930509d-68cf-4e2c-8c6d-94d2b5e2db43", "location": "https://random-subdomain.scalekit.dev/magicLink/8930509d-68cf-4e2c-8c6d-94d2b5e2db43", "expireTime": "2024-10-03T13:35:50.563013Z"}<iframe src="https://random-subdomain.scalekit.dev/magicLink/8930509d-68cf-4e2c-8c6d-94d2b5e2db43" width="100%" height="600" frameborder="0" allow="clipboard-write"></iframe>Embed the portal in your application’s settings or admin section where customers manage authentication configuration.
Configuration and session
| Setting | Requirement |
|---|---|
| Redirect URI | Register the domain that hosts the iframe (your application’s own domain) as an Allowed callback URL at Authentication > Redirects > Allowed Callback URLs |
| iframe attributes | Include allow="clipboard-write" for copy-paste functionality |
| Dimensions | Minimum recommended height: 600px |
| Link expiration | Generated links expire after 1 minute if not loaded |
| Session duration | Portal session remains active for up to 6 hours once loaded |
| Single-use | Each generated link can only be used once to initialize a session |
Customize the admin portal
Match the admin portal to your brand identity. Configure branding at Settings > Branding:
| Option | Description |
|---|---|
| Logo | Upload your company logo (displayed in the portal header) |
| Accent color | Set the primary color to match your brand palette |
| Favicon | Provide a custom favicon for browser tabs |
For additional customization options including custom domains, see the Custom domain guide.