Skip to main content

Organization Setup

Configure your organization's settings, subscription tier, and multi-tenant isolation for enterprise AI governance.

Overview

Each organization in Ascend operates in complete isolation with dedicated configuration, user management, and data separation.

Source: ow-ai-backend/routes/organization_admin_routes.py

Compliance: SOC 2 CC6.1, NIST AC-2, PCI-DSS 8.3

Subscription Tiers

Available Tiers

TierUser LimitFeatures
Trial5 usersBasic features, 14-day trial
Startup10 usersCore governance features
Business50 usersAdvanced analytics, API access
Enterprise1000 usersFull features, custom SLAs

Viewing Subscription Info

curl https://pilot.owkai.app/api/organizations/subscription-info \
-H "Cookie: session=YOUR_SESSION_COOKIE"

Response:

{
"organization_id": 4,
"organization_name": "Acme Corp",
"subscription_tier": "business",
"subscription_status": "active",
"user_limit": 50,
"current_users": 12,
"available_slots": 38,
"usage_percentage": 24.0
}

Organization Settings

Get Current Settings

curl https://pilot.owkai.app/api/organizations/settings \
-H "Cookie: session=YOUR_SESSION_COOKIE"

Response:

{
"organization_id": 4,
"organization_name": "Acme Corp",
"mfa": {
"configuration": "OPTIONAL",
"enforced": false
},
"session": {
"timeout_minutes": 60,
"max_concurrent_sessions": 5
},
"password_policy": {
"min_length": 12,
"require_uppercase": true,
"require_lowercase": true,
"require_numbers": true,
"require_special": true,
"max_age_days": 90
},
"ip_restrictions": {
"enabled": false,
"allowed_ranges": []
}
}

Multi-Tenant Isolation

Data Isolation Architecture

┌─────────────────────────────────────────────────────────────┐
│ API Request Flow │
├─────────────────────────────────────────────────────────────┤
│ 1. JWT Token → Extract user_id │
│ 2. User → Lookup organization_id │
│ 3. Query → Filter by organization_id │
│ 4. Response → Only tenant-specific data │
└─────────────────────────────────────────────────────────────┘

Isolated Tables

All data tables enforce organization isolation:

TableColumnStatus
alertsorganization_idIsolated
agent_actionsorganization_idIsolated
smart_rulesorganization_idIsolated
workflowsorganization_idIsolated
governance_policiesorganization_idIsolated
api_keysorganization_idIsolated
audit_logsorganization_idIsolated
registered_agentsorganization_idIsolated

AWS Cognito Integration

Each organization can have its own Cognito User Pool:

Per-Organization Pool

FieldDescription
cognito_user_pool_idDedicated user pool ID
cognito_app_client_idApp client for authentication
cognito_mfa_configurationMFA enforcement level

Pool Configuration Options

SettingOptionsDefault
MFA ConfigurationOFF, OPTIONAL, ONOPTIONAL
Password PolicyConfigurable12 chars, mixed case, numbers, special
Token ValidityAccess: 60min, Refresh: 30 daysStandard

Organization Administration

Required Permissions

ActionRequired Role
View subscriptionadmin
Manage usersadmin
Update settingsadmin
View audit logsadmin, viewer

Admin Capabilities

Administrators can:

  • Invite new users to the organization
  • Assign and modify user roles
  • View subscription usage
  • Configure security settings
  • Access audit logs

API Reference

EndpointMethodDescription
/api/organizations/settingsGETGet org settings
/api/organizations/subscription-infoGETGet subscription
/api/organizations/{id}/usersGETList users
/api/organizations/{id}/usersPOSTInvite user
/api/organizations/usersGETList users (auto org)

Source: ow-ai-backend/routes/organization_admin_routes.py

Best Practices

  1. Monitor usage: Track user count against tier limits
  2. Plan upgrades: Upgrade tier before hitting limits
  3. Enable MFA: Enforce MFA for all admin users
  4. Review settings: Audit security settings quarterly
  5. Document access: Maintain records of admin assignments

Troubleshooting

Cannot invite users

Cause: User limit reached for subscription tier.

Solution: Upgrade subscription or remove inactive users.

Settings not saving

Cause: Insufficient admin permissions.

Solution: Verify user has admin role with is_org_admin: true.

Cognito pool mismatch

Cause: Organization using default pool instead of dedicated.

Solution: Contact support to configure per-organization pool.


Source: organization_admin_routes.py