Skip to main content

Organization API

OrganizationHandle manages Keycloak organizations, their members, invitations, and linked identity providers.

Access

const organization = realm.organization('acme');

Common Lifecycle

const organization = await realm.organization('acme').ensure({
name: 'Acme Corp',
});

await organization.addMember(realm.user('alice'));

Core Methods

  • get() and getById(id)
  • create(data)
  • update(data)
  • delete()
  • ensure(data)
  • discard()

Like the other fluent handles, ensure creates or updates and returns the handle.

Alias Resolution

Organizations are looked up by alias. If multiple exact alias matches are returned by Keycloak, the handle throws an explicit ambiguity error instead of guessing.

This matters when older test or seed data has already created duplicate aliases.

Membership

const members = await organization.listMembers({
page: 2,
pageSize: 25,
membershipType: 'managed',
});

await organization.addMember(realm.user('alice'));
await organization.removeMember(realm.user('alice'));

Supported methods:

  • listMembers({ page?, pageSize?, membershipType? })
  • addMember(userHandle)
  • removeMember(userHandle)

Invitations

The organization endpoints expect FormData payloads, so the fluent handle forwards them directly.

const invite = new FormData();
invite.set('email', 'alice@example.com');

await organization.invite(invite);

Supported methods:

  • invite(formData)
  • inviteExistingUser(formData)

Linked Identity Providers

const google = realm.identityProvider('google');

await organization.linkIdentityProvider(google);
await organization.listIdentityProviders();
await organization.unlinkIdentityProvider(google);

Supported methods:

  • listIdentityProviders()
  • linkIdentityProvider(identityProviderHandle)
  • unlinkIdentityProvider(identityProviderHandle)