---
title: Organization management
description: Manage Organizations, Memberships, invitations, and domains with the Clerk Flutter SDK.
---

Use Clerk's Organization resources to manage members, invitations, and Organization settings. Access the auth state with `ClerkAuth.of(context)`.

## Organization

`Organization` represents a Clerk Organization. You can access the active organization via `ClerkAuth.of(context).organization`, or from an `OrganizationMembership` via `membership.organization`.

### Access the current organization

The following example demonstrates how to access the active organization from the auth state.

```dart
final auth = ClerkAuth.of(context);
final organization = auth.organization; // Organization? (null if no active org)
```

### Set active organization

The following example demonstrates how to switch the active organization for the current session.

```dart
final auth = ClerkAuth.of(context);

await auth.setActiveOrganization(organization);
```

### Create organization

The following example demonstrates how to create a new organization with a name and slug.

```dart
final auth = ClerkAuth.of(context);

await auth.createOrganization(
  name: 'Acme',
  slug: 'acme',
);
```

To set a logo at creation time, pass a `dart:io` `File`.

```dart
await auth.createOrganization(
  name: 'Acme',
  slug: 'acme',
  logo: logoFile,
);
```

### Update organization

The following example demonstrates how to update an organization's name or logo.

```dart
final auth = ClerkAuth.of(context);

await auth.updateOrganization(
  organization: organization,
  name: 'Acme Corp',
);
```

To update the logo, pass a `dart:io` `File`.

```dart
await auth.updateOrganization(
  organization: organization,
  logo: logoFile,
);
```

### Leave organization

The following example demonstrates how to remove the current user from an organization.

```dart
final auth = ClerkAuth.of(context);

await auth.leaveOrganization(organization: organization);
```

---

## Organization membership

`OrganizationMembership` represents the current user's membership within an Organization. You can access memberships from `ClerkAuth.of(context).user?.organizationMemberships`.

### List memberships

The following example demonstrates how to retrieve all organization memberships for the current user.

```dart
final auth = ClerkAuth.of(context);
final memberships = auth.user?.organizationMemberships ?? [];
```

### Current membership

The following example demonstrates how to access the current user's active membership and its associated organization.

```dart
final auth = ClerkAuth.of(context);
final membership = auth.user?.currentOrganization;
final organization = membership?.organization;
```

### Check a permission

The following example demonstrates how to use `membership.hasPermission` to check if the current user has a specific permission within the organization.

```dart
final membership = auth.user?.currentOrganization;

if (membership?.hasPermission(Permission.membershipsManage) == true) {
  // User can manage members
}
```

Predefined permissions:

| Permission | Key |
| - | - |
| `Permission.profileManage` | `org:sys_profile:manage` |
| `Permission.profileDelete` | `org:sys_profile:delete` |
| `Permission.membershipsRead` | `org:sys_memberships:read` |
| `Permission.membershipsManage` | `org:sys_memberships:manage` |
| `Permission.domainsRead` | `org:sys_domains:read` |
| `Permission.domainsManage` | `org:sys_domains:manage` |

---

## Organization invitations

`OrganizationInvitation` represents an invitation sent to the current user to join an Organization.

### List pending invitations

The following example demonstrates how to fetch all pending organization invitations for the current user.

```dart
final auth = ClerkAuth.of(context);
final invitations = await auth.fetchOrganizationInvitations();
```

### Accept invitation

The following example demonstrates how to accept a pending organization invitation.

```dart
final auth = ClerkAuth.of(context);
final invitations = await auth.fetchOrganizationInvitations();
final invitation = invitations.first;

await auth.acceptOrganizationInvitation(invitation);
```

---

## Organization domains

`OrganizationDomain` represents a verified email domain for an Organization.

### List domains

The following example demonstrates how to fetch all verified email domains for an organization.

```dart
final auth = ClerkAuth.of(context);
final domains = await auth.fetchOrganizationDomains(organization: organization);
```

### Create domain

The following example demonstrates how to add an email domain to an organization with an enrollment mode.

```dart
final auth = ClerkAuth.of(context);

await auth.createDomain(
  organization: organization,
  name: 'acme.com',
  mode: EnrollmentMode.automaticInvitation,
);
```

Available enrollment modes:

| Mode | Description |
| - | - |
| `EnrollmentMode.automaticSuggestion` | Users with a matching email domain are suggested to join |
| `EnrollmentMode.automaticInvitation` | Users with a matching email domain are automatically invited |
| `EnrollmentMode.manualInvitation` | Users must be manually invited |
