Documentation Index
Fetch the complete documentation index at: https://mintlify.com/workos/workos-node/llms.txt
Use this file to discover all available pages before exploring further.
This guide covers working with organizations in WorkOS, including creating organizations, managing domains, and working with organization memberships.
Prerequisites
npm install @workos-inc/node
import { WorkOS } from '@workos-inc/node';
const workos = new WorkOS(process.env.WORKOS_API_KEY);
Creating and Managing Organizations
Create an Organization
Create a new organization with domain verification:const organization = await workos.organizations.createOrganization({
name: 'Acme Corporation',
domainData: [
{ domain: 'acme.com', state: 'verified' }
]
});
console.log(organization.id); // org_123
console.log(organization.name); // Acme Corporation
console.log(organization.domains); // Domain details
With idempotency key for safe retries:const organization = await workos.organizations.createOrganization(
{
name: 'Acme Corporation',
domainData: [
{ domain: 'acme.com', state: 'verified' }
]
},
{
idempotencyKey: 'unique-request-id'
}
);
Get an Organization
Retrieve organization details by ID:const organization = await workos.organizations.getOrganization('org_123');
console.log(organization.name);
console.log(organization.domains);
console.log(organization.allowProfilesOutsideOrganization);
Or by external ID:const organization = await workos.organizations.getOrganizationByExternalId(
'external_org_123'
);
Update an Organization
Update organization properties:const organization = await workos.organizations.updateOrganization({
organization: 'org_123',
name: 'Acme Corp',
domainData: [
{ domain: 'acme.com', state: 'verified' },
{ domain: 'acmecorp.com', state: 'pending' }
]
});
console.log('Updated:', organization.name);
List Organizations
List organizations with filtering:const organizations = await workos.organizations.listOrganizations({
domains: ['acme.com'],
limit: 10
});
for await (const org of organizations.autoPagination()) {
console.log(org.id, org.name);
}
Delete an Organization
Permanently delete an organization:await workos.organizations.deleteOrganization('org_123');
Organization Domains
Domain States
Organization domains can have different verification states:
import { DomainDataState } from '@workos-inc/node';
const organization = await workos.organizations.createOrganization({
name: 'Acme Corporation',
domainData: [
{ domain: 'acme.com', state: DomainDataState.Verified },
{ domain: 'acme.org', state: DomainDataState.Pending }
]
});
Working with Domains
const organization = await workos.organizations.getOrganization('org_123');
organization.domains.forEach(domain => {
console.log(domain.domain); // acme.com
console.log(domain.state); // verified
console.log(domain.verificationStrategy); // dns
console.log(domain.verificationToken); // Token for DNS record
});
Store custom data with organizations:
const organization = await workos.organizations.createOrganization({
name: 'Acme Corporation',
metadata: {
industry: 'Technology',
employeeCount: 500,
tier: 'enterprise'
}
});
console.log(organization.metadata);
Organization Memberships
Create Organization Membership
Add a user to an organization:
const membership = await workos.userManagement.createOrganizationMembership({
userId: 'user_123',
organizationId: 'org_123',
roleSlug: 'member'
});
console.log(membership.id); // om_123
console.log(membership.userId); // user_123
console.log(membership.organizationId); // org_123
console.log(membership.role); // { slug: 'member' }
List Organization Memberships
List all memberships for an organization:
const memberships = await workos.userManagement.listOrganizationMemberships({
organizationId: 'org_123',
limit: 10
});
for await (const membership of memberships.autoPagination()) {
console.log(membership.userId, membership.role.slug);
}
List memberships for a specific user:
const memberships = await workos.userManagement.listOrganizationMemberships({
userId: 'user_123'
});
Get Organization Membership
const membership = await workos.userManagement.getOrganizationMembership('om_123');
console.log(membership.userId);
console.log(membership.organizationId);
console.log(membership.status); // active
Update Organization Membership
Change a user’s role:
const membership = await workos.userManagement.updateOrganizationMembership(
'om_123',
{ roleSlug: 'admin' }
);
console.log('New role:', membership.role.slug);
Deactivate/Reactivate Membership
// Deactivate membership
const membership = await workos.userManagement.deactivateOrganizationMembership('om_123');
console.log(membership.status); // inactive
// Reactivate membership
const reactivated = await workos.userManagement.reactivateOrganizationMembership('om_123');
console.log(reactivated.status); // active
Delete Organization Membership
await workos.userManagement.deleteOrganizationMembership('om_123');
Organization Roles
List Organization Roles
Retrieve all roles available for an organization:
const { data } = await workos.organizations.listOrganizationRoles({
organizationId: 'org_123'
});
data.forEach(role => {
console.log(role.slug); // admin, member, etc.
console.log(role.name); // Admin
console.log(role.type); // EnvironmentRole or OrganizationRole
console.log(role.permissions); // ['posts:create', 'posts:delete']
});
Organization Invitations
Send Invitation
Invite a user to join an organization:
const invitation = await workos.userManagement.sendInvitation({
email: 'newuser@example.com',
organizationId: 'org_123',
roleSlug: 'member',
inviterUserId: 'user_456'
});
console.log(invitation.id); // invitation_123
console.log(invitation.token); // Invitation token
console.log(invitation.acceptInvitationUrl); // URL to accept
List Invitations
const invitations = await workos.userManagement.listInvitations({
organizationId: 'org_123'
});
for await (const invitation of invitations.autoPagination()) {
console.log(invitation.email, invitation.state);
}
Get Invitation
const invitation = await workos.userManagement.getInvitation('invitation_123');
console.log(invitation.email);
console.log(invitation.state); // pending, accepted, expired
Find by token:
const invitation = await workos.userManagement.findInvitationByToken(
'invitation_token'
);
Accept Invitation
const invitation = await workos.userManagement.acceptInvitation('invitation_123');
console.log(invitation.state); // accepted
Resend Invitation
const invitation = await workos.userManagement.resendInvitation('invitation_123');
Revoke Invitation
const invitation = await workos.userManagement.revokeInvitation('invitation_123');
console.log(invitation.state); // revoked
Organization Feature Flags
Manage feature flags at the organization level:
const featureFlags = await workos.organizations.listOrganizationFeatureFlags({
organizationId: 'org_123',
limit: 10
});
for await (const flag of featureFlags.autoPagination()) {
console.log(flag.slug); // advanced-dashboard
console.log(flag.name); // Advanced Dashboard
console.log(flag.enabled); // true/false
console.log(flag.defaultValue); // Default state
}
Stripe Integration
Link organizations to Stripe customers:
// Set Stripe customer ID
const organization = await workos.organizations.updateOrganization({
organization: 'org_123',
stripeCustomerId: 'cus_MX8J9nfK4lP2Yw'
});
console.log(organization.stripeCustomerId);
// Clear Stripe customer ID
const cleared = await workos.organizations.updateOrganization({
organization: 'org_123',
stripeCustomerId: null
});
Organization API Keys
List Organization API Keys
const apiKeys = await workos.organizations.listOrganizationApiKeys({
organizationId: 'org_123',
limit: 10
});
for await (const key of apiKeys.autoPagination()) {
console.log(key.id);
console.log(key.name);
console.log(key.obfuscatedValue); // sk_…PRYS
console.log(key.lastUsedAt);
console.log(key.permissions);
}
Create Organization API Key
const apiKey = await workos.organizations.createOrganizationApiKey(
{
organizationId: 'org_123',
name: 'Production Key',
permissions: ['read', 'write']
},
{
idempotencyKey: 'unique-key-id'
}
);
console.log(apiKey.id);
console.log(apiKey.value); // Full key - only shown once!
console.log(apiKey.obfuscatedValue);
Complete Example
import { WorkOS, DomainDataState } from '@workos-inc/node';
const workos = new WorkOS(process.env.WORKOS_API_KEY);
async function setupOrganization(companyName: string, domain: string) {
// Create organization
const organization = await workos.organizations.createOrganization({
name: companyName,
domainData: [
{ domain, state: DomainDataState.Verified }
],
metadata: {
industry: 'Technology',
plan: 'enterprise'
}
});
console.log('Organization created:', organization.id);
// Add users to organization
const adminUser = await workos.userManagement.createUser({
email: `admin@${domain}`,
firstName: 'Admin',
lastName: 'User',
emailVerified: true
});
const membership = await workos.userManagement.createOrganizationMembership({
userId: adminUser.id,
organizationId: organization.id,
roleSlug: 'admin'
});
console.log('Admin user added:', membership.id);
// Send invitation to team member
const invitation = await workos.userManagement.sendInvitation({
email: `member@${domain}`,
organizationId: organization.id,
roleSlug: 'member',
inviterUserId: adminUser.id
});
console.log('Invitation sent:', invitation.acceptInvitationUrl);
return organization;
}
// Usage
setupOrganization('Acme Corporation', 'acme.com')
.then(org => console.log('Setup complete:', org.name))
.catch(console.error);