Skip to main content

Teams

In Otoroshi, all resources are attached to an Organization and one or more Teams. Teams provide a second level of grouping within an organization, allowing you to control visibility and access to entities.

UI page

You can find all teams here

Properties

PropertyTypeDescription
idstringUnique identifier of the team
tenantstringThe organization this team belongs to
namestringDisplay name of the team
descriptionstringDescription of the team
tagsarray of stringTags for categorization
metadataobjectKey/value metadata

Use cases

  • Access control: Restrict which admin users can see and modify specific entities by assigning them to teams
  • Resource organization: Group related entities (routes, API keys, certificates) by team so each team sees only their own resources
  • Delegation: Allow team leads to manage their own resources without having access to other teams' configurations

Entities location

Every Otoroshi entity has a location property (_loc when serialized to JSON) that includes the teams the entity belongs to.

An entity visible to specific teams:

{
"_loc": {
"tenant": "organization-1",
"teams": [
"team-1",
"team-2"
]
}
}

An entity visible to all teams in the organization:

{
"_loc": {
"tenant": "organization-1",
"teams": [
"*"
]
}
}

User access control

Admin users have team-level access rights that determine what they can read and write:

{
"rights": [
{
"tenant": "organization-1",
"teams": [
{ "value": "team-backend", "canRead": true, "canWrite": true },
{ "value": "team-frontend", "canRead": true, "canWrite": false }
]
}
]
}

In this example, the user has full access to the backend team's entities but can only view (not modify) the frontend team's entities.

JSON example

{
"id": "team_platform",
"tenant": "organization_production",
"name": "Platform Team",
"description": "Team responsible for platform infrastructure",
"metadata": {
"lead": "alice@example.com"
},
"tags": ["platform", "infrastructure"]
}

Admin API

GET    /api/teams           # List all teams
POST /api/teams # Create a team
GET /api/teams/:id # Get a team
PUT /api/teams/:id # Update a team
DELETE /api/teams/:id # Delete a team
PATCH /api/teams/:id # Partially update a team

When a team is deleted, the resources associated are not deleted. The team reference on those resources will become invalid (empty).