Skip to content

Organization Management Examples

Last Updated: 2025-11-23

Complete examples for managing organizations, members, and organization settings in the multi-tenant environment.


Table of Contents


Create Organization

Create a new organization. The creating user becomes the organization owner with admin role.

REST API

Endpoint: POST /api/v1/organizations

curl Example

curl -X POST http://localhost:8080/api/v1/organizations \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "ACME Corporation",
    "slug": "acme-corp",
    "settings": "{\"theme\": \"dark\", \"timezone\": \"UTC\"}"
  }'

JavaScript/TypeScript Example

interface CreateOrganizationRequest {
  name: string;
  slug: string;
  settings?: string; // JSON string
}

async function createOrganization(
  name: string,
  slug: string,
  settings?: Record<string, any>
) {
  const response = await fetch('http://localhost:8080/api/v1/organizations', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${accessToken}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      name,
      slug,
      settings: settings ? JSON.stringify(settings) : undefined
    })
  });

  return await response.json();
}

// Usage
const org = await createOrganization(
  'ACME Corporation',
  'acme-corp',
  { theme: 'dark', timezone: 'UTC' }
);

console.log(`Organization created: ${org.id}`);

Python Example

import requests
import json

def create_organization(name, slug, access_token, settings=None):
    data = {
        'name': name,
        'slug': slug
    }

    if settings:
        data['settings'] = json.dumps(settings)

    response = requests.post(
        'http://localhost:8080/api/v1/organizations',
        headers={'Authorization': f'Bearer {access_token}'},
        json=data
    )

    return response.json()

# Usage
org = create_organization(
    'ACME Corporation',
    'acme-corp',
    access_token,
    settings={'theme': 'dark', 'timezone': 'UTC'}
)

print(f"Organization created: {org['id']}")

Go Example

type CreateOrganizationRequest struct {
    Name     string `json:"name"`
    Slug     string `json:"slug"`
    Settings string `json:"settings,omitempty"`
}

type Organization struct {
    ID        string `json:"id"`
    Name      string `json:"name"`
    Slug      string `json:"slug"`
    IsActive  bool   `json:"is_active"`
    Settings  string `json:"settings"`
    CreatedAt string `json:"created_at"`
    UpdatedAt string `json:"updated_at"`
}

func createOrganization(name, slug, accessToken string, settings map[string]interface{}) (*Organization, error) {
    reqData := CreateOrganizationRequest{
        Name: name,
        Slug: slug,
    }

    if len(settings) > 0 {
        settingsJSON, _ := json.Marshal(settings)
        reqData.Settings = string(settingsJSON)
    }

    jsonData, _ := json.Marshal(reqData)
    req, _ := http.NewRequest("POST",
        "http://localhost:8080/api/v1/organizations",
        bytes.NewBuffer(jsonData))

    req.Header.Set("Authorization", "Bearer "+accessToken)
    req.Header.Set("Content-Type", "application/json")

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()

    var org Organization
    json.NewDecoder(resp.Body).Decode(&org)
    return &org, nil
}

Response

{
  "id": "org-789",
  "name": "ACME Corporation",
  "slug": "acme-corp",
  "is_active": true,
  "settings": "{\"theme\":\"dark\",\"timezone\":\"UTC\"}",
  "created_at": "2025-11-23T10:00:00Z",
  "updated_at": "2025-11-23T10:00:00Z"
}

List Organizations

List all organizations the authenticated user has access to.

REST API

Endpoint: GET /api/v1/organizations

curl Example

curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  http://localhost:8080/api/v1/organizations

JavaScript/TypeScript Example

async function listOrganizations() {
  const response = await fetch('http://localhost:8080/api/v1/organizations', {
    headers: {
      'Authorization': `Bearer ${accessToken}`
    }
  });

  return await response.json();
}

// Usage
const organizations = await listOrganizations();
console.log(`You have access to ${organizations.length} organizations`);

organizations.forEach(org => {
  console.log(`- ${org.name} (${org.slug})`);
});

Python Example

import requests

def list_organizations(access_token):
    response = requests.get(
        'http://localhost:8080/api/v1/organizations',
        headers={'Authorization': f'Bearer {access_token}'}
    )

    return response.json()

# Usage
organizations = list_organizations(access_token)
print(f"You have access to {len(organizations)} organizations")

for org in organizations:
    print(f"- {org['name']} ({org['slug']})")

Go Example

func listOrganizations(accessToken string) ([]Organization, error) {
    req, _ := http.NewRequest("GET",
        "http://localhost:8080/api/v1/organizations",
        nil)

    req.Header.Set("Authorization", "Bearer "+accessToken)

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()

    var orgs []Organization
    json.NewDecoder(resp.Body).Decode(&orgs)
    return orgs, nil
}

Response

[
  {
    "id": "org-789",
    "name": "ACME Corporation",
    "slug": "acme-corp",
    "is_active": true,
    "settings": "{\"theme\":\"dark\"}",
    "created_at": "2025-11-23T10:00:00Z",
    "updated_at": "2025-11-23T10:00:00Z"
  },
  {
    "id": "org-456",
    "name": "Tech Startup",
    "slug": "tech-startup",
    "is_active": true,
    "settings": "{}",
    "created_at": "2025-11-22T15:30:00Z",
    "updated_at": "2025-11-22T15:30:00Z"
  }
]

Get Organization Details

Get detailed information about a specific organization.

REST API

Endpoint: GET /api/v1/organizations/:id or GET /api/v1/organizations/slug/:slug

curl Example

# Get by ID
curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  http://localhost:8080/api/v1/organizations/org-789

# Get by slug
curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  http://localhost:8080/api/v1/organizations/slug/acme-corp

JavaScript/TypeScript Example

async function getOrganization(idOrSlug: string, bySlug = false) {
  const endpoint = bySlug
    ? `http://localhost:8080/api/v1/organizations/slug/${idOrSlug}`
    : `http://localhost:8080/api/v1/organizations/${idOrSlug}`;

  const response = await fetch(endpoint, {
    headers: {
      'Authorization': `Bearer ${accessToken}`
    }
  });

  return await response.json();
}

// Usage
const org = await getOrganization('acme-corp', true);
console.log(`Organization: ${org.name}`);

Python Example

import requests

def get_organization(id_or_slug, access_token, by_slug=False):
    endpoint = (
        f'http://localhost:8080/api/v1/organizations/slug/{id_or_slug}'
        if by_slug
        else f'http://localhost:8080/api/v1/organizations/{id_or_slug}'
    )

    response = requests.get(
        endpoint,
        headers={'Authorization': f'Bearer {access_token}'}
    )

    return response.json()

# Usage
org = get_organization('acme-corp', access_token, by_slug=True)
print(f"Organization: {org['name']}")

Go Example

func getOrganization(idOrSlug, accessToken string, bySlug bool) (*Organization, error) {
    var endpoint string
    if bySlug {
        endpoint = fmt.Sprintf("http://localhost:8080/api/v1/organizations/slug/%s", idOrSlug)
    } else {
        endpoint = fmt.Sprintf("http://localhost:8080/api/v1/organizations/%s", idOrSlug)
    }

    req, _ := http.NewRequest("GET", endpoint, nil)
    req.Header.Set("Authorization", "Bearer "+accessToken)

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()

    var org Organization
    json.NewDecoder(resp.Body).Decode(&org)
    return &org, nil
}

Update Organization

Update organization name or settings.

REST API

Endpoint: PUT /api/v1/organizations/:id

curl Example

curl -X PUT http://localhost:8080/api/v1/organizations/org-789 \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "ACME Corp Updated",
    "settings": "{\"theme\": \"light\", \"timezone\": \"America/New_York\"}"
  }'

JavaScript/TypeScript Example

async function updateOrganization(
  orgId: string,
  updates: {
    name?: string;
    settings?: Record<string, any>;
  }
) {
  const body: any = {};

  if (updates.name) {
    body.name = updates.name;
  }

  if (updates.settings) {
    body.settings = JSON.stringify(updates.settings);
  }

  const response = await fetch(
    `http://localhost:8080/api/v1/organizations/${orgId}`,
    {
      method: 'PUT',
      headers: {
        'Authorization': `Bearer ${accessToken}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(body)
    }
  );

  return await response.json();
}

// Usage
const updated = await updateOrganization('org-789', {
  name: 'ACME Corp Updated',
  settings: { theme: 'light', timezone: 'America/New_York' }
});

Python Example

import requests
import json

def update_organization(org_id, access_token, name=None, settings=None):
    data = {}

    if name:
        data['name'] = name

    if settings:
        data['settings'] = json.dumps(settings)

    response = requests.put(
        f'http://localhost:8080/api/v1/organizations/{org_id}',
        headers={'Authorization': f'Bearer {access_token}'},
        json=data
    )

    return response.json()

# Usage
updated = update_organization(
    'org-789',
    access_token,
    name='ACME Corp Updated',
    settings={'theme': 'light', 'timezone': 'America/New_York'}
)

Delete Organization

Permanently delete an organization and all its data.

REST API

Endpoint: DELETE /api/v1/organizations/:id

curl Example

curl -X DELETE \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  http://localhost:8080/api/v1/organizations/org-789

JavaScript/TypeScript Example

async function deleteOrganization(orgId: string) {
  const response = await fetch(
    `http://localhost:8080/api/v1/organizations/${orgId}`,
    {
      method: 'DELETE',
      headers: {
        'Authorization': `Bearer ${accessToken}`
      }
    }
  );

  if (response.ok) {
    console.log('Organization deleted successfully');
  }
}

// Usage with confirmation
if (confirm('Are you sure you want to delete this organization?')) {
  await deleteOrganization('org-789');
}

Python Example

import requests

def delete_organization(org_id, access_token):
    response = requests.delete(
        f'http://localhost:8080/api/v1/organizations/{org_id}',
        headers={'Authorization': f'Bearer {access_token}'}
    )

    return response.ok

# Usage
if delete_organization('org-789', access_token):
    print('Organization deleted successfully')

Warning: This action is irreversible and will delete all organization data including files, directories, and members.


Add Members

Add a user to an organization with a specific role.

REST API

Endpoint: POST /api/v1/organizations/:id/members

curl Example

curl -X POST http://localhost:8080/api/v1/organizations/org-789/members \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": "user-456",
    "role_id": "role-123"
  }'

JavaScript/TypeScript Example

async function addOrganizationMember(
  orgId: string,
  userId: string,
  roleId: string
) {
  const response = await fetch(
    `http://localhost:8080/api/v1/organizations/${orgId}/members`,
    {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${accessToken}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        user_id: userId,
        role_id: roleId
      })
    }
  );

  return await response.json();
}

// Usage
const member = await addOrganizationMember('org-789', 'user-456', 'role-123');
console.log(`User added with role: ${member.role_id}`);

Python Example

import requests

def add_organization_member(org_id, user_id, role_id, access_token):
    response = requests.post(
        f'http://localhost:8080/api/v1/organizations/{org_id}/members',
        headers={'Authorization': f'Bearer {access_token}'},
        json={
            'user_id': user_id,
            'role_id': role_id
        }
    )

    return response.json()

# Usage
member = add_organization_member('org-789', 'user-456', 'role-123', access_token)
print(f"User added with role: {member['role_id']}")

List Organization Members

Get all members of an organization.

REST API

Endpoint: GET /api/v1/organizations/:id/members

curl Example

curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  http://localhost:8080/api/v1/organizations/org-789/members

JavaScript/TypeScript Example

async function listOrganizationMembers(orgId: string) {
  const response = await fetch(
    `http://localhost:8080/api/v1/organizations/${orgId}/members`,
    {
      headers: {
        'Authorization': `Bearer ${accessToken}`
      }
    }
  );

  return await response.json();
}

// Usage
const members = await listOrganizationMembers('org-789');
console.log(`Organization has ${members.length} members`);

members.forEach(member => {
  console.log(`- User ${member.user_id} (Role: ${member.role_id})`);
});

Python Example

import requests

def list_organization_members(org_id, access_token):
    response = requests.get(
        f'http://localhost:8080/api/v1/organizations/{org_id}/members',
        headers={'Authorization': f'Bearer {access_token}'}
    )

    return response.json()

# Usage
members = list_organization_members('org-789', access_token)
print(f"Organization has {len(members)} members")

for member in members:
    print(f"- User {member['user_id']} (Role: {member['role_id']})")

Update Member Role

Change a member's role within the organization.

REST API

Endpoint: PUT /api/v1/organizations/:id/members/:userId/role

curl Example

curl -X PUT http://localhost:8080/api/v1/organizations/org-789/members/user-456/role \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "role_id": "role-456"
  }'

JavaScript/TypeScript Example

async function updateMemberRole(
  orgId: string,
  userId: string,
  roleId: string
) {
  const response = await fetch(
    `http://localhost:8080/api/v1/organizations/${orgId}/members/${userId}/role`,
    {
      method: 'PUT',
      headers: {
        'Authorization': `Bearer ${accessToken}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        role_id: roleId
      })
    }
  );

  return await response.json();
}

// Usage
const updated = await updateMemberRole('org-789', 'user-456', 'role-admin');
console.log('Member role updated successfully');

Python Example

import requests

def update_member_role(org_id, user_id, role_id, access_token):
    response = requests.put(
        f'http://localhost:8080/api/v1/organizations/{org_id}/members/{user_id}/role',
        headers={'Authorization': f'Bearer {access_token}'},
        json={'role_id': role_id}
    )

    return response.json()

# Usage
updated = update_member_role('org-789', 'user-456', 'role-admin', access_token)
print('Member role updated successfully')

Remove Member

Remove a user from organization membership.

REST API

Endpoint: DELETE /api/v1/organizations/:id/members/:userId

curl Example

curl -X DELETE \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  http://localhost:8080/api/v1/organizations/org-789/members/user-456

JavaScript/TypeScript Example

async function removeOrganizationMember(orgId: string, userId: string) {
  const response = await fetch(
    `http://localhost:8080/api/v1/organizations/${orgId}/members/${userId}`,
    {
      method: 'DELETE',
      headers: {
        'Authorization': `Bearer ${accessToken}`
      }
    }
  );

  if (response.ok) {
    console.log('Member removed successfully');
  }
}

// Usage
await removeOrganizationMember('org-789', 'user-456');

Python Example

import requests

def remove_organization_member(org_id, user_id, access_token):
    response = requests.delete(
        f'http://localhost:8080/api/v1/organizations/{org_id}/members/{user_id}',
        headers={'Authorization': f'Bearer {access_token}'}
    )

    return response.ok

# Usage
if remove_organization_member('org-789', 'user-456', access_token):
    print('Member removed successfully')

Note: Cannot remove the last admin from an organization.


Set Primary Organization

Set which organization is the user's primary organization.

REST API

Endpoint: PUT /api/v1/user/organizations/:id/primary

curl Example

curl -X PUT \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  http://localhost:8080/api/v1/user/organizations/org-789/primary

JavaScript/TypeScript Example

async function setPrimaryOrganization(orgId: string) {
  const response = await fetch(
    `http://localhost:8080/api/v1/user/organizations/${orgId}/primary`,
    {
      method: 'PUT',
      headers: {
        'Authorization': `Bearer ${accessToken}`
      }
    }
  );

  if (response.ok) {
    console.log('Primary organization updated');
  }
}

// Usage
await setPrimaryOrganization('org-789');

Python Example

import requests

def set_primary_organization(org_id, access_token):
    response = requests.put(
        f'http://localhost:8080/api/v1/user/organizations/{org_id}/primary',
        headers={'Authorization': f'Bearer {access_token}'}
    )

    return response.ok

# Usage
if set_primary_organization('org-789', access_token):
    print('Primary organization updated')

See Also