Teams API Documentation
Complete API reference for team management, membership, and multi-tenant applications
Overview
The Teams API enables multi-tenant application development with role-based access control. Perfect for organizations, workspaces, and collaborative environments.
Base URL:
https://hub.regardingwork.com/api
Authentication:
JWT Bearer tokens (admin actions only)Team Roles:
admin
(full control) • member
(team access)
Multi-Tenant:
Users can belong to multiple teamsPerfect for Multi-Tenant Applications
Company workspaces with departments
Family budgets + business accounts
Team collaboration platforms
Team Operations
List All Teams
/api/teams
Purpose: Get all active teams (public endpoint for discovery)
Authentication: Not required
Response Format:
{
"teams": [
{
"id": 1,
"name": "Demo Team",
"slug": "demo-team",
"description": "A demo team for testing",
"member_count": 3,
"requires_approval": true,
"is_active": true,
"created_at": "2025-09-03T03:09:07.299881",
"updated_at": "2025-09-03T03:09:07.299885"
}
]
}
Create Team
/api/teams
SUPERADMIN ONLY
Purpose: Create a new team (superadmin only)
Headers: Authorization: Bearer {token}
Required Role: SUPERADMIN
Request Body:
{
"name": "Team Name",
"slug": "team-slug",
"description": "Team description",
"requires_approval": true
}
Response Format:
{
"message": "Team created successfully",
"team": {
"id": 1,
"name": "Team Name",
"slug": "team-slug",
"description": "Team description",
"member_count": 1,
"members": [...],
"requires_approval": true,
"is_active": true,
"created_by": 3,
"created_at": "2025-09-03T03:09:07.299881",
"updated_at": "2025-09-03T03:09:07.299885"
}
}
Get Team Details
/api/teams/{slug}
Purpose: Get detailed team information including members
Authentication: Not required
Response Format:
{
"id": 1,
"name": "Demo Team",
"slug": "demo-team",
"description": "A demo team for testing",
"member_count": 3,
"members": [
{
"id": 1,
"user_id": 3,
"role": "admin",
"status": "active",
"joined_at": "2025-09-03T03:09:07.324134",
"user": {
"id": 3,
"username": "michelini",
"profile_photo_url": "/static/uploads/profile_photos/29_ceabe8ae.jpg",
"bio": null,
"website_url": null
}
}
],
"requires_approval": true,
"is_active": true,
"created_by": 3,
"created_at": "2025-09-03T03:09:07.299881",
"updated_at": "2025-09-03T03:09:07.299885"
}
Team Membership Management
List Team Members
/api/teams/{slug}/members
Purpose: Get all members of a specific team
Authentication: Not required
Add Team Member
/api/teams/{slug}/members
ADMIN REQUIRED
Purpose: Add a user to the team
Headers: Authorization: Bearer {token}
Required Role: Team admin or SUPERADMIN
Request Body:
{
"username": "newmember",
"role": "member"
}
Update Member Role
/api/teams/{slug}/members/{username}
ADMIN REQUIRED
Purpose: Update a team member's role
Headers: Authorization: Bearer {token}
Required Role: Team admin or SUPERADMIN
Request Body:
{
"role": "admin"
}
Remove Team Member
/api/teams/{slug}/members/{username}
ADMIN REQUIRED
Purpose: Remove a member from the team
Headers: Authorization: Bearer {token}
Required Role: Team admin or SUPERADMIN
Team Invitations
Send Team Invitation
/api/teams/{slug}/invite
ADMIN REQUIRED
Purpose: Invite a user to join the team
Headers: Authorization: Bearer {token}
Required Role: Team admin or SUPERADMIN
Request Body:
{
"email": "user@example.com",
"role": "member",
"message": "Join our team!"
}
Response Format:
{
"message": "Invitation sent successfully",
"invitation": {
"id": "uuid-token",
"team_slug": "demo-team",
"email": "user@example.com",
"role": "member",
"expires_at": "2025-09-10T03:09:07.324134",
"status": "pending"
}
}
Accept/Decline Invitation
/api/invitations/{token}
Purpose: Accept or decline a team invitation
Headers: Authorization: Bearer {token}
Request Body:
{
"action": "accept"
}
User Team Information
Get Current User's Teams
/api/user/teams
PERFECT FOR MULTI-TENANCY
Purpose: Get all teams the current user belongs to (essential for multi-tenant apps)
Headers: Authorization: Bearer {token}
Response Format:
{
"teams": [
{
"id": 1,
"name": "Demo Team",
"slug": "demo-team",
"description": "A demo team for testing",
"user_membership": {
"id": 5,
"team_id": 1,
"user_id": 29,
"role": "admin",
"status": "active",
"joined_at": "2025-09-03T03:09:07.324134"
}
}
]
}
Get User's Pending Invitations
/api/user/invitations
Purpose: Get all pending team invitations for current user
Headers: Authorization: Bearer {token}
Multi-Tenant Implementation Example
Perfect for applications that need team-based access control:
Example: Multi-Tenant Finance App
// After user authenticates with Hub SSO
app.get('/sso/callback', async (req, res) => {
const { token } = req.query;
// 1. Validate user with Hub
const userResponse = await fetch('https://hub.regardingwork.com/api/auth/validate', {
headers: { 'Authorization': `Bearer ${token}` }
});
const userData = await userResponse.json();
// 2. Get user's teams (their "tenants")
const teamsResponse = await fetch('https://hub.regardingwork.com/api/user/teams', {
headers: { 'Authorization': `Bearer ${token}` }
});
const teamsData = await teamsResponse.json();
// 3. User can access multiple tenants
const userTenants = teamsData.teams.map(team => ({
tenantId: team.slug, // "acme-corp", "family-budget"
tenantName: team.name, // "Acme Corporation"
role: team.user_membership.role, // "admin" or "member"
teamId: team.id
}));
// 4. Set session with multi-tenant context
req.session.user = userData;
req.session.tenants = userTenants;
req.session.activeTenant = userTenants[0]; // Default to first
res.redirect('/dashboard');
});