Skip to main content
The Organization Service provides methods to create, manage, and configure organizations within your Zitadel instance.

Overview

The OrganizationServiceApi class provides methods for:
  • Creating and managing organizations
  • Managing organization domains and verification
  • Organization state management (activate/deactivate)
  • Organization metadata operations
  • Listing and searching organizations

Initialization

require 'zitadel/client'

api_client = Zitadel::Client::ApiClient.new
api_client.config.access_token = 'YOUR_ACCESS_TOKEN'

org_service = Zitadel::Client::Api::OrganizationServiceApi.new(api_client)

Organization Management

add_organization

Create a new organization with an administrative user.
request = Zitadel::Client::OrganizationServiceAddOrganizationRequest.new(
  name: 'Acme Corporation',
  admins: [
    Zitadel::Client::OrganizationServiceAdmin.new(
      user_id: 'user_123',
      roles: ['ORG_OWNER']
    )
  ]
)

response = org_service.add_organization(request)
puts "Organization ID: #{response.organization_id}"
name
string
required
The name of the organization
admins
array
List of administrative users for the organization
organization_id
string
The unique identifier of the created organization

list_organizations

List organizations with filtering and pagination.
request = Zitadel::Client::OrganizationServiceListOrganizationsRequest.new(
  query: Zitadel::Client::OrganizationServiceListQuery.new(
    limit: 50,
    offset: 0
  ),
  queries: [
    Zitadel::Client::OrganizationServiceSearchQuery.new(
      name_query: Zitadel::Client::OrganizationServiceOrganizationNameQuery.new(
        name: 'Acme',
        method: 'TEXT_QUERY_METHOD_CONTAINS'
      )
    )
  ]
)

response = org_service.list_organizations(request)
response.result.each do |org|
  puts "Organization: #{org.name}"
end

update_organization

Update organization details.
request = Zitadel::Client::OrganizationServiceUpdateOrganizationRequest.new(
  organization_id: 'org_123',
  name: 'Acme Corporation Updated'
)

response = org_service.update_organization(request)

activate_organization

Activate a deactivated organization. Users will be able to log in again.
request = Zitadel::Client::OrganizationServiceActivateOrganizationRequest.new(
  organization_id: 'org_123'
)

response = org_service.activate_organization(request)
organization_id
string
required
The ID of the organization to activate

deactivate_organization

Deactivate an organization. Users will not be able to log in.
request = Zitadel::Client::OrganizationServiceDeactivateOrganizationRequest.new(
  organization_id: 'org_123'
)

response = org_service.deactivate_organization(request)

delete_organization

Permanently delete an organization.
request = Zitadel::Client::OrganizationServiceDeleteOrganizationRequest.new(
  organization_id: 'org_123'
)

response = org_service.delete_organization(request)

Domain Management

add_organization_domain

Add a new domain to an organization. Domains are used to identify which organization a user belongs to.
request = Zitadel::Client::OrganizationServiceAddOrganizationDomainRequest.new(
  organization_id: 'org_123',
  domain: 'acme.com'
)

response = org_service.add_organization_domain(request)
organization_id
string
required
The organization ID
domain
string
required
The domain name to add
details
OrganizationServiceDetails
Metadata about the operation

generate_organization_domain_validation

Generate a validation token for domain verification.
request = Zitadel::Client::OrganizationServiceGenerateOrganizationDomainValidationRequest.new(
  organization_id: 'org_123',
  domain: 'acme.com',
  type: 'DOMAIN_VALIDATION_TYPE_DNS'
)

response = org_service.generate_organization_domain_validation(request)
puts "Validation token: #{response.token}"
puts "Validation URL: #{response.url}"
type
string
required
Validation type: DOMAIN_VALIDATION_TYPE_DNS or DOMAIN_VALIDATION_TYPE_HTTP
token
string
The validation token to add to DNS or HTTP endpoint
url
string
The URL where the token should be accessible (for HTTP validation)

verify_organization_domain

Verify a domain after adding the validation token.
request = Zitadel::Client::OrganizationServiceVerifyOrganizationDomainRequest.new(
  organization_id: 'org_123',
  domain: 'acme.com'
)

response = org_service.verify_organization_domain(request)

list_organization_domains

List all domains for an organization.
request = Zitadel::Client::OrganizationServiceListOrganizationDomainsRequest.new(
  organization_id: 'org_123',
  query: Zitadel::Client::OrganizationServiceListQuery.new(
    limit: 100
  )
)

response = org_service.list_organization_domains(request)
response.result.each do |domain|
  puts "Domain: #{domain.domain_name}, Verified: #{domain.is_verified}"
end

delete_organization_domain

Remove a domain from an organization.
request = Zitadel::Client::OrganizationServiceDeleteOrganizationDomainRequest.new(
  organization_id: 'org_123',
  domain: 'acme.com'
)

response = org_service.delete_organization_domain(request)

Metadata Management

set_organization_metadata

Set or update organization metadata.
request = Zitadel::Client::OrganizationServiceSetOrganizationMetadataRequest.new(
  organization_id: 'org_123',
  key: 'industry',
  value: 'Technology'.bytes
)

response = org_service.set_organization_metadata(request)
key
string
required
The metadata key
value
bytes
required
The metadata value as bytes

list_organization_metadata

List all metadata for an organization.
request = Zitadel::Client::OrganizationServiceListOrganizationMetadataRequest.new(
  organization_id: 'org_123',
  query: Zitadel::Client::OrganizationServiceListQuery.new(
    limit: 100
  )
)

response = org_service.list_organization_metadata(request)
response.result.each do |metadata|
  puts "#{metadata.key}: #{metadata.value}"
end

delete_organization_metadata

Delete a specific metadata entry.
request = Zitadel::Client::OrganizationServiceDeleteOrganizationMetadataRequest.new(
  organization_id: 'org_123',
  key: 'industry'
)

response = org_service.delete_organization_metadata(request)

Complete Example

require 'zitadel/client'

api_client = Zitadel::Client::ApiClient.new
api_client.config.access_token = ENV['ZITADEL_ACCESS_TOKEN']

org_service = Zitadel::Client::Api::OrganizationServiceApi.new(api_client)

begin
  # Create organization
  create_request = Zitadel::Client::OrganizationServiceAddOrganizationRequest.new(
    name: 'Acme Corporation',
    admins: [
      Zitadel::Client::OrganizationServiceAdmin.new(
        user_id: 'user_123',
        roles: ['ORG_OWNER']
      )
    ]
  )
  
  org_response = org_service.add_organization(create_request)
  org_id = org_response.organization_id
  puts "Created organization: #{org_id}"
  
  # Add domain
  domain_request = Zitadel::Client::OrganizationServiceAddOrganizationDomainRequest.new(
    organization_id: org_id,
    domain: 'acme.com'
  )
  org_service.add_organization_domain(domain_request)
  
  # Generate validation
  validation_request = Zitadel::Client::OrganizationServiceGenerateOrganizationDomainValidationRequest.new(
    organization_id: org_id,
    domain: 'acme.com',
    type: 'DOMAIN_VALIDATION_TYPE_DNS'
  )
  
  validation_response = org_service.generate_organization_domain_validation(validation_request)
  puts "Add this TXT record: #{validation_response.token}"
  
  # Set metadata
  metadata_request = Zitadel::Client::OrganizationServiceSetOrganizationMetadataRequest.new(
    organization_id: org_id,
    key: 'industry',
    value: 'Technology'.bytes
  )
  org_service.set_organization_metadata(metadata_request)
  
rescue Zitadel::Client::ApiError => e
  puts "Error: #{e.message}"
end

See Also

Build docs developers (and LLMs) love