Appwrite Teams API
The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources. 19 operations across 9 paths in the Appwrite 2.0.0 OpenAPI.
The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources. 19 operations across 9 paths in the Appwrite 2.0.0 OpenAPI.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/appwrite-teams-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.0.0
info:
title: Appwrite Teams API
description: Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs)
version: 2.0.0
termsOfService: https://appwrite.io/policy/terms
contact:
name: Appwrite Team
url: https://appwrite.io/support
email: team@appwrite.io
license:
name: BSD-3-Clause
url: https://raw.githubusercontent.com/appwrite/appwrite/master/LICENSE
servers:
- url: https://cloud.appwrite.io/v1
description: Appwrite Cloud endpoint.
- url: https://{region}.cloud.appwrite.io/v1
description: Appwrite Cloud regional endpoint. Replace `{region}` with your project region.
variables:
region:
default: fra
description: Appwrite Cloud region.
tags:
- name: teams
description: The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources
paths:
/teams:
get:
summary: List teams
operationId: teamsList
tags:
- teams
description: Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.
responses:
'200':
description: Teams List
content:
application/json:
schema:
$ref: '#/components/schemas/teamList'
deprecated: false
x-appwrite:
group: teams
demo: teams/list.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: teams.read
platforms:
- console
- client
- server
packaging: false
public: true
auth:
console:
Project: []
client:
Project: []
server:
Project: []
Session: []
security:
- Project: []
Session: []
Key: []
JWT: []
parameters:
- name: queries
description: 'Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total, billingPlan'
required: false
schema:
type: array
items:
type: string
default: []
in: query
- name: search
description: 'Search term to filter your list results. Max length: 256 chars.'
required: false
schema:
type: string
example: <SEARCH>
default: ''
in: query
- name: total
description: When set to false, the total count returned will be 0 and will not be calculated.
required: false
schema:
type: boolean
example: false
default: true
in: query
post:
summary: Create team
operationId: teamsCreate
tags:
- teams
description: Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.
responses:
'201':
description: Team
content:
application/json:
schema:
$ref: '#/components/schemas/team'
deprecated: false
x-appwrite:
group: teams
demo: teams/create.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: teams.write
platforms:
- console
- client
- server
packaging: false
public: true
auth:
console:
Project: []
client:
Project: []
server:
Project: []
Session: []
security:
- Project: []
Session: []
Key: []
JWT: []
requestBody:
content:
application/json:
schema:
type: object
properties:
teamId:
description: Team ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.
type: string
example: <TEAM_ID>
x-appwrite:
idGenerator: ID.unique
name:
description: 'Team name. Max length: 128 chars.'
type: string
example: <NAME>
roles:
description: Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](https://appwrite.io/docs/permissions). Maximum of 100 roles are allowed, each 32 characters long.
type: array
default:
- owner
items:
type: string
required:
- teamId
- name
/teams/{teamId}:
get:
summary: Get team
operationId: teamsGet
tags:
- teams
description: Get a team by its ID. All team members have read access for this resource.
responses:
'200':
description: Team
content:
application/json:
schema:
$ref: '#/components/schemas/team'
deprecated: false
x-appwrite:
group: teams
demo: teams/get.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: teams.read
platforms:
- console
- client
- server
packaging: false
public: true
auth:
console:
Project: []
client:
Project: []
server:
Project: []
Session: []
security:
- Project: []
Session: []
Key: []
JWT: []
parameters:
- name: teamId
description: Team ID.
required: true
schema:
type: string
example: <TEAM_ID>
in: path
put:
summary: Update name
operationId: teamsUpdateName
tags:
- teams
description: Update the team's name by its unique ID.
responses:
'200':
description: Team
content:
application/json:
schema:
$ref: '#/components/schemas/team'
deprecated: false
x-appwrite:
group: teams
demo: teams/update-name.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: teams.write
platforms:
- console
- client
- server
packaging: false
public: true
auth:
console:
Project: []
client:
Project: []
server:
Project: []
Session: []
security:
- Project: []
Session: []
Key: []
JWT: []
parameters:
- name: teamId
description: Team ID.
required: true
schema:
type: string
example: <TEAM_ID>
in: path
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
description: 'New team name. Max length: 128 chars.'
type: string
example: <NAME>
required:
- name
delete:
summary: Delete team
operationId: teamsDelete
tags:
- teams
description: Delete a team using its ID. Only team members with the owner role can delete the team.
responses:
'204':
description: No content
deprecated: false
x-appwrite:
group: teams
demo: teams/delete.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: teams.write
platforms:
- console
- client
- server
packaging: false
public: true
auth:
console:
Project: []
client:
Project: []
server:
Project: []
Session: []
security:
- Project: []
Session: []
Key: []
JWT: []
parameters:
- name: teamId
description: Team ID.
required: true
schema:
type: string
example: <TEAM_ID>
in: path
/teams/{teamId}/installations:
get:
summary: List Installations
operationId: teamsListInstallations
tags:
- teams
description: List app installations on a team. Any team member can read installations.
responses:
'200':
description: App installations list
content:
application/json:
schema:
$ref: '#/components/schemas/appInstallationList'
deprecated: false
x-appwrite:
group: null
demo: teams/list-installations.md
rate-limit: 120
rate-time: 60
rate-key: ip:{ip},userId:{userId}
scope: teams.read
platforms:
- console
- client
- server
packaging: false
public: true
auth:
console:
Project: []
client:
Project: []
server:
Project: []
Session: []
security:
- Project: []
Session: []
Key: []
JWT: []
parameters:
- name: teamId
description: Team ID.
required: true
schema:
type: string
example: <TEAM_ID>
in: path
- name: queries
description: Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long.
required: false
schema:
type: array
items:
type: string
default: []
in: query
- name: total
description: When set to false, the total count returned will be 0 and will not be calculated.
required: false
schema:
type: boolean
example: false
default: true
in: query
post:
summary: Create Installation
operationId: teamsCreateInstallation
tags:
- teams
description: Install an app on a team. When authenticated as a user, only team members with the owner role can install apps. Requests using an API key or in admin mode can install apps on any team. The installation is granted the scopes the app currently requests.
responses:
'201':
description: AppInstallation
content:
application/json:
schema:
$ref: '#/components/schemas/appInstallation'
deprecated: false
x-appwrite:
group: null
demo: teams/create-installation.md
rate-limit: 60
rate-time: 60
rate-key: ip:{ip},userId:{userId}
scope: teams.write
platforms:
- console
- client
- server
packaging: false
public: true
auth:
console:
Project: []
client:
Project: []
server:
Project: []
Session: []
security:
- Project: []
Session: []
Key: []
JWT: []
parameters:
- name: teamId
description: Team ID.
required: true
schema:
type: string
example: <TEAM_ID>
in: path
requestBody:
content:
application/json:
schema:
type: object
properties:
appId:
description: Application unique ID.
type: string
example: <APP_ID>
authorizationDetails:
description: Authorization details granted to the installation as a JSON array of objects, each with a `type` and app-defined fields. The Appwrite Console stores authorized project IDs here.
type: string
default: ''
example: <AUTHORIZATION_DETAILS>
required:
- appId
/teams/{teamId}/installations/{installationId}:
get:
summary: Get Installation
operationId: teamsGetInstallation
tags:
- teams
description: Get an app installation on a team by its unique ID. Any team member can read installations.
responses:
'200':
description: AppInstallation
content:
application/json:
schema:
$ref: '#/components/schemas/appInstallation'
deprecated: false
x-appwrite:
group: null
demo: teams/get-installation.md
rate-limit: 120
rate-time: 60
rate-key: ip:{ip},userId:{userId}
scope: teams.read
platforms:
- console
- client
- server
packaging: false
public: true
auth:
console:
Project: []
client:
Project: []
server:
Project: []
Session: []
security:
- Project: []
Session: []
Key: []
JWT: []
parameters:
- name: teamId
description: Team ID.
required: true
schema:
type: string
example: <TEAM_ID>
in: path
- name: installationId
description: Installation unique ID.
required: true
schema:
type: string
example: <INSTALLATION_ID>
in: path
put:
summary: Update Installation
operationId: teamsUpdateInstallation
tags:
- teams
description: Update an app installation on a team. Only team members with the owner role can update installations. The installation's granted scopes are refreshed to the scopes the app currently requests; previously issued installation access tokens are revoked.
responses:
'200':
description: AppInstallation
content:
application/json:
schema:
$ref: '#/components/schemas/appInstallation'
deprecated: false
x-appwrite:
group: null
demo: teams/update-installation.md
rate-limit: 60
rate-time: 60
rate-key: ip:{ip},userId:{userId}
scope: teams.write
platforms:
- console
- client
- server
packaging: false
public: true
auth:
console:
Project: []
client:
Project: []
server:
Project: []
Session: []
security:
- Project: []
Session: []
Key: []
JWT: []
parameters:
- name: teamId
description: Team ID.
required: true
schema:
type: string
example: <TEAM_ID>
in: path
- name: installationId
description: Installation unique ID.
required: true
schema:
type: string
example: <INSTALLATION_ID>
in: path
requestBody:
content:
application/json:
schema:
type: object
properties:
authorizationDetails:
description: Authorization details granted to the installation as a JSON array of objects, each with a `type` and app-defined fields. Omit to keep the current value.
type: string
example: <AUTHORIZATION_DETAILS>
nullable: true
delete:
summary: Delete Installation
operationId: teamsDeleteInstallation
tags:
- teams
description: Uninstall an app from a team by its installation ID. Only team members with the owner role can remove installations. Previously issued installation access tokens are revoked.
responses:
'204':
description: No content
deprecated: false
x-appwrite:
group: null
demo: teams/delete-installation.md
rate-limit: 60
rate-time: 60
rate-key: ip:{ip},userId:{userId}
scope: teams.write
platforms:
- console
- client
- server
packaging: false
public: true
auth:
console:
Project: []
client:
Project: []
server:
Project: []
Session: []
security:
- Project: []
Session: []
Key: []
JWT: []
parameters:
- name: teamId
description: Team ID.
required: true
schema:
type: string
example: <TEAM_ID>
in: path
- name: installationId
description: Installation unique ID.
required: true
schema:
type: string
example: <INSTALLATION_ID>
in: path
/teams/{teamId}/logs:
get:
summary: List team logs
operationId: teamsListLogs
tags:
- teams
description: Get the team activity logs list by its unique ID.
responses:
'200':
description: Logs List
content:
application/json:
schema:
$ref: '#/components/schemas/logList'
deprecated: false
x-appwrite:
group: logs
demo: teams/list-logs.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: teams.read
platforms:
- console
packaging: false
public: true
auth:
console:
Project: []
security:
- Project: []
parameters:
- name: teamId
description: Team ID.
required: true
schema:
type: string
example: <TEAM_ID>
in: path
- name: queries
description: Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Only supported methods are limit and offset
required: false
schema:
type: array
items:
type: string
default: []
in: query
- name: total
description: When set to false, the total count returned will be 0 and will not be calculated.
required: false
schema:
type: boolean
example: false
default: true
in: query
/teams/{teamId}/memberships:
get:
summary: List team memberships
operationId: teamsListMemberships
tags:
- teams
description: Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint. Hide sensitive attributes from the response by toggling membership privacy in the Console.
responses:
'200':
description: Memberships List
content:
application/json:
schema:
$ref: '#/components/schemas/membershipList'
deprecated: false
x-appwrite:
group: memberships
demo: teams/list-memberships.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: teams.read
platforms:
- console
- client
- server
packaging: false
public: true
auth:
console:
Project: []
client:
Project: []
server:
Project: []
Session: []
security:
- Project: []
Session: []
Key: []
JWT: []
parameters:
- name: teamId
description: Team ID.
required: true
schema:
type: string
example: <TEAM_ID>
in: path
- name: queries
description: 'Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm, roles'
required: false
schema:
type: array
items:
type: string
default: []
in: query
- name: search
description: 'Search term to filter your list results. Max length: 256 chars.'
required: false
schema:
type: string
example: <SEARCH>
default: ''
in: query
- name: total
description: When set to false, the total count returned will be 0 and will not be calculated.
required: false
schema:
type: boolean
example: false
default: true
in: query
post:
summary: Create team membership
operationId: teamsCreateMembership
tags:
- teams
description: "Invite a new member to join your team. Provide an ID for existing users, or invite unregistered users using an email or phone number. If initiated from a Client SDK, Appwrite will send an email or sms with a link to join the team to the invited user, and an account will be created for them if one doesn't exist. If initiated from a Server SDK, the new member will be added automatically to the team.\n\nYou only need to provide one of a user ID, email, or phone number. Appwrite will prioritize accepting the user ID > email > phone number if you provide more than one of these parameters.\n\nUse the `url` parameter to redirect the user from the invitation email to your app. After the user is redirected, use the [Update Team Membership Status](https://appwrite.io/docs/references/cloud/client-web/teams#updateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md)\
\ Appwrite will accept the only redirect URLs under the domains you have added as a platform on the Appwrite Console.\n"
responses:
'201':
description: Membership
content:
application/json:
schema:
$ref: '#/components/schemas/membership'
deprecated: false
x-appwrite:
group: memberships
demo: teams/create-membership.md
rate-limit: 10
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: teams.write
platforms:
- console
- client
- server
packaging: false
public: true
auth:
console:
Project: []
client:
Project: []
server:
Project: []
Session: []
security:
- Project: []
Session: []
Key: []
JWT: []
parameters:
- name: teamId
description: Team ID.
required: true
schema:
type: string
example: <TEAM_ID>
in: path
requestBody:
content:
application/json:
schema:
type: object
properties:
email:
description: Email of the new team member.
type: string
default: ''
example: email@example.com
format: email
userId:
description: ID of the user to be added to a team.
type: string
default: ''
example: <USER_ID>
phone:
description: Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.
type: string
default: ''
example: '+12065550100'
format: phone
roles:
description: Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](https://appwrite.io/docs/permissions). Maximum of 100 roles are allowed, each 81 characters long.
type: array
items:
type: string
url:
description: URL to redirect the user back to your app from the invitation email. This parameter is not required when an API key is supplied. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.
type: string
default: ''
example: https://example.com
format: url
name:
description: 'Name of the new team member. Max length: 128 chars.'
type: string
default: ''
example: <NAME>
required:
- roles
/teams/{teamId}/memberships/{membershipId}:
get:
summary: Get team membership
operationId: teamsGetMembership
tags:
- teams
description: Get a team member by the membership unique id. All team members have read access for this resource. Hide sensitive attributes from the response by toggling membership privacy in the Console.
responses:
'200':
description: Membership
content:
application/json:
schema:
$ref: '#/components/schemas/membership'
deprecated: false
x-appwrite:
group: memberships
demo: teams/get-membership.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: teams.read
platforms:
- console
- client
- server
packaging: false
public: true
auth:
console:
Project: []
client:
Project: []
server:
Project: []
Session: []
security:
- Project: []
Session: []
Key: []
JWT: []
parameters:
- name: teamId
description: Team ID.
required: true
schema:
type: string
example: <TEAM_ID>
in: path
- name: membershipId
description: Membership ID.
required: true
schema:
type: string
example: <MEMBERSHIP_ID>
in: path
patch:
summary: Update team membership
operationId: teamsUpdateMembership
tags:
- teams
description: 'Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](https://appwrite.io/docs/permissions).
'
responses:
'200':
description: Membership
content:
application/json:
schema:
$ref: '#/components/schemas/membership'
deprecated: false
x-appwrite:
group: memberships
demo: teams/update-membership.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: teams.write
platforms:
- console
- client
- server
packaging: false
public: true
auth:
console:
Project: []
client:
Project: []
server:
Project: []
Session: []
security:
- Project: []
Session: []
Key: []
JWT: []
parameters:
- name: teamId
description: Team ID.
required: true
schema:
type: string
example: <TEAM_ID>
in: path
- name: membershipId
description: Membership ID.
required: true
schema:
type: string
example: <MEMBERSHIP_ID>
in: path
requestBody:
content:
application/json:
schema:
type: object
properties:
roles:
description: An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https://appwrite.io/docs/permissions). Maximum of 100 roles are allowed, each 81 characters long.
type: array
items:
type: string
required:
- roles
delete:
summary: Delete team membership
operationId: teamsDeleteMembership
tags:
- teams
description: This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.
responses:
'204':
description: No content
deprecated: false
x-appwrite:
group: memberships
demo: teams/delete-membership.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: teams.write
platforms:
- console
- client
- server
packaging: false
public: true
auth:
console:
Project: []
client:
Project: []
server:
Project: []
Session: []
security:
- Project: []
Session: []
Key: []
JWT: []
parameters:
- name: teamId
description: Team ID.
required: true
schema:
type: string
example: <TEAM_ID>
in: path
- name: membershipId
description: Membership ID.
required: true
schema:
type: string
example: <MEMBERSHIP_ID>
in: path
/teams/{teamId}/memberships/{membershipId}/status:
patch:
summary: Update team membership status
operationId: teamsUpdateMembershipStatus
tags:
- teams
description: 'Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.
If the request is successful, a session for the user is automatically created.
'
responses:
'200':
description: Membership
content:
application/json:
schema:
$ref: '#/components/schemas/membership'
deprecated: false
x-appwrite:
group: memberships
demo: teams/update-membership-status.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: public
platforms:
- console
- client
- server
packaging: false
public: true
auth:
console:
Project: []
client:
Project: []
server:
Project: []
Session: []
security:
- Project: []
Session: []
JWT: []
parameters:
- name: teamId
description: Team ID.
required: true
schema:
type: string
example: <TEAM_ID>
in: path
- name: membershipId
description: Membership ID.
required: true
schema:
type: string
example: <MEMBERSHIP_ID>
in: path
requestBody:
content:
application/json:
schema:
type: object
properties:
userId:
description: User ID.
type: string
example: <USER_ID>
secret:
description: Secret key.
type: string
example: <SECRET>
required:
-
# --- truncated at 32 KB (49 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/appwrite/refs/heads/main/openapi/appwrite-teams-api-openapi.yml