Organization management
Use Clerk's iOS Organization APIs to create and manage Organizations, switch the , and build custom Organization flows. Organization methods use Swift concurrency and throw when a request fails, so call them with try await from an async context.
import ClerkKit
do {
let organization = try await Clerk.shared.organizations.create(
name: "Acme",
slug: "acme"
)
} catch {
// Show an error state.
}Active Organization
The is stored on Session.lastActiveOrganizationId for the current session. Use clerk.organization to read the Active Organization and clerk.organizationMembership to read the signed-in user's Active Organization membership.
Use clerk.auth.setActive() to switch the for a session. Pass sessionId and organizationId to select an Organization, or omit organizationId (or pass nil) to select the user's . The latter isn't allowed when clerk.environment?.organizationSettings.forceOrganizationSelection is true.
Select an Organization
guard let sessionId = clerk.session?.id else { return }
try await clerk.auth.setActive(
sessionId: sessionId,
organizationId: "org_123"
)guard let sessionId = clerk.session?.id else { return }
try await clerk.auth.setActive(sessionId: sessionId)Organization
Organization represents a Clerk Organization and provides helpers for profile, role, membership, invitation, request, and domain management.
Create or get an Organization
let organization = try await clerk.organizations.create(
name: "Acme",
slug: "acme"
)
let existingOrganization = try await clerk.organizations.get(id: "org_123")let updatedOrganization = try await organization.update(
name: "Acme, Inc.",
slug: "acme-inc"
)let deletedObject = try await organization.destroy()let updatedOrganization = try await organization.setLogo(imageData: imageData)
let organizationWithoutLogo = try await organization.deleteLogo()let response = try await organization.getRoles(page: 1, pageSize: 20)
let roles = response.data
let totalCount = response.totalCountMemberships
Use membership APIs to list members, add members, update Roles, remove members, leave an Organization, and check Organization Permissions.
List memberships
let response = try await organization.getMemberships(
query: "jane",
role: ["org:member"],
page: 1,
pageSize: 20
)
let memberships = response.datalet membership = try await organization.addMember(
userId: userId,
role: "org:member"
)
let removedMembership = try await organization.removeMember(userId: userId)Update or delete a membership
OrganizationMembership also provides helpers for updating a member's role in the Organization and deleting the membership.
let updatedMembership = try await organizationMembership.update(role: "org:admin")
let deletedMembership = try await organizationMembership.destroy()Check membership Permissions
OrganizationMembership provides the hasPermission() method, along with the convenience properties below for checking Clerk System Permissions:
canManageProfilecanDeleteOrganizationcanReadMembershipscanManageMembershipscanReadDomainscanManageDomainscanReadBillingcanManageBillingcanReadAPIKeyscanManageAPIKeys
if organizationMembership.canManageMemberships {
// Show member management actions.
}
if organizationMembership.hasPermission("org:sys_domains:manage") {
// Show domain management actions.
}You can also use the typed OrganizationSystemPermission enum:
if organizationMembership.hasPermission(.manageDomains) {
// Show domain management actions.
}Invitations
Use invitation APIs to invite users to an Organization, list invitations, bulk-create invitations, and revoke invitations.
Create or list invitations
let invitation = try await organization.inviteMember(
emailAddress: "new@acme.com",
role: "org:member"
)
let response = try await organization.getInvitations(
page: 1,
pageSize: 20,
status: ["pending"]
)
let invitations = response.datalet invitations = try await organization.inviteMembers(
emailAddresses: ["one@acme.com", "two@acme.com"],
role: "org:member"
)Revoke an invitation
OrganizationInvitation also provides a helper for revoking an invitation.
let revokedInvitation = try await invitation.revoke()Membership Requests
Use Membership Request APIs to list, accept, and reject requests to join an Organization.
List Membership Requests
let response = try await organization.getMembershipRequests(
page: 1,
pageSize: 20,
status: "pending"
)
let membershipRequests = response.dataAccept or reject a Membership Request
OrganizationMembershipRequest also provides helpers for accepting and rejecting Membership Requests.
let acceptedRequest = try await membershipRequest.accept()
let rejectedRequest = try await membershipRequest.reject()Domains
Use Organization domain APIs to create, list, retrieve, verify, update, and delete Verified Domains.
Create or list domains
let domain = try await organization.createDomain(domainName: "acme.com")
let response = try await organization.getDomains(
page: 1,
pageSize: 20,
enrollmentMode: .automaticInvitation
)
let domains = response.datalet domain = try await organization.getDomain(domainId: domainId)
let deletedObject = try await domain.delete()OrganizationDomain also provides helpers for deleting a domain, verifying affiliation, and updating the enrollment mode.
domain.delete()domain.prepareAffiliationVerification(affiliationEmailAddress:)domain.attemptAffiliationVerification(code:)domain.sendEmailCode(affiliationEmailAddress:)domain.verifyCode(_:)domain.updateEnrollmentMode(_:deletePending:)
Delete a domain
Use domain.delete() when you already have an OrganizationDomain instance. To delete a domain by ID, fetch it with organization.getDomain(domainId:) first, then call delete() on the result.
let deletedObject = try await domain.delete()let preparedDomain = try await domain.prepareAffiliationVerification(
affiliationEmailAddress: "admin@acme.com"
)
let verifiedDomain = try await preparedDomain.attemptAffiliationVerification(
code: "123456"
)let preparedDomain = try await domain.sendEmailCode(
affiliationEmailAddress: "admin@acme.com"
)
let verifiedDomain = try await preparedDomain.verifyCode("123456")let updatedDomain = try await verifiedDomain.updateEnrollmentMode(
.automaticInvitation,
deletePending: false
)User Organization helpers
User also provides helpers for listing Organization invitations, suggestions, memberships, and creation defaults.
List Organization invitations
let invitationResponse = try await user.getOrganizationInvitations(
page: 1,
pageSize: 20,
status: ["pending"]
)
let invitations = invitationResponse.dataUserOrganizationInvitation also provides a helper for accepting an invitation.
let acceptedInvitation = try await userOrganizationInvitation.accept()let suggestionResponse = try await user.getOrganizationSuggestions(
page: 1,
pageSize: 20,
status: ["pending"]
)
let suggestions = suggestionResponse.dataOrganizationSuggestion also provides a helper for accepting a suggestion.
let acceptedSuggestion = try await organizationSuggestion.accept()let membershipResponse = try await user.getOrganizationMemberships(
page: 1,
pageSize: 20
)
let memberships = membershipResponse.datalet creationDefaults = try await user.getOrganizationCreationDefaults()let deletedObject = try await user.leaveOrganization(organizationId: "org_123")Feedback
Last updated on