Outline Groups API
`Groups` represent a list of users that logically belong together, for example there might be groups for each department in your organization. Groups can be granted access to collections with read or write permissions.
`Groups` represent a list of users that logically belong together, for example there might be groups for each department in your organization. Groups can be granted access to collections with read or write permissions.
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/outline-groups-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.2.0
info:
title: Outline Groups API
description: '# Introduction
The Outline API is structured in an RPC style.'
version: 0.1.0
contact:
email: hello@getoutline.com
license:
name: BSD-3-Clause
url: https://github.com/outline/openapi/blob/main/LICENSE
servers:
- url: https://app.getoutline.com/api
description: Cloud hosted
- url: https://{domain}/api
description: Self-hosted on your own server
variables:
domain:
default: example.com
security:
- BearerAuth: []
- OAuth2:
- read
- write
tags:
- name: Groups
description: '`Groups` represent a list of users that logically belong together, for
example there might be groups for each department in your organization.
Groups can be granted access to collections with read or write permissions.'
paths:
/groups.info:
post:
tags:
- Groups
summary: Retrieve a group
description: Retrieve the details of a group by its unique identifier, including its name and member count.
requestBody:
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: Unique identifier for the group.
format: uuid
required:
- id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/Group'
policies:
type: array
items:
$ref: '#/components/schemas/Policy'
'401':
$ref: '#/components/responses/Unauthenticated'
'403':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
operationId: groupsInfo
/groups.list:
post:
tags:
- Groups
summary: List all groups
description: List all groups in the workspace. Groups are used to organize users and manage permissions for collections.
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Pagination'
- $ref: '#/components/schemas/Sorting'
- type: object
properties:
userId:
type: string
format: uuid
description: Filter to groups including a specific user
externalId:
type: string
format: uuid
description: Filter to groups matching an external ID
query:
type: string
format: uuid
description: Filter to groups matching a search query
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
groups:
type: array
items:
$ref: '#/components/schemas/Group'
groupMemberships:
type: array
description: A preview of memberships in the group, note that this is not all memberships which can be queried from `groups.memberships`.
items:
$ref: '#/components/schemas/GroupMembership'
policies:
type: array
items:
$ref: '#/components/schemas/Policy'
pagination:
$ref: '#/components/schemas/Pagination'
'401':
$ref: '#/components/responses/Unauthenticated'
'403':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimited'
operationId: groupsList
/groups.create:
post:
tags:
- Groups
summary: Create a group
description: Create a new group with the specified name. Groups can be used to organize users and assign collection permissions to multiple users at once.
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
example: Designers
required:
- name
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/Group'
policies:
type: array
items:
$ref: '#/components/schemas/Policy'
'400':
$ref: '#/components/responses/Validation'
'401':
$ref: '#/components/responses/Unauthenticated'
'403':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimited'
operationId: groupsCreate
/groups.update:
post:
tags:
- Groups
summary: Update a group
description: Update an existing group's name. The group is identified by its unique identifier.
requestBody:
content:
application/json:
schema:
type: object
properties:
id:
type: string
format: uuid
name:
type: string
example: Designers
required:
- id
- name
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/Group'
policies:
type: array
items:
$ref: '#/components/schemas/Policy'
'400':
$ref: '#/components/responses/Validation'
'401':
$ref: '#/components/responses/Unauthenticated'
'403':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
operationId: groupsUpdate
/groups.delete:
post:
tags:
- Groups
summary: Delete a group
description: Deleting a group will cause all of its members to lose access to any collections the group has previously been added to. This action can’t be undone so please be careful.
requestBody:
content:
application/json:
schema:
type: object
properties:
id:
type: string
format: uuid
required:
- id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
example: true
'400':
$ref: '#/components/responses/Validation'
'401':
$ref: '#/components/responses/Unauthenticated'
'403':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
operationId: groupsDelete
/groups.memberships:
post:
tags:
- Groups
summary: List all group members
description: List and filter all the members in a group.
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
id:
type: string
description: Group id
example: a32c2ee6-fbde-4654-841b-0eabdc71b812
query:
type: string
description: Filter memberships by user names
example: jenny
required:
- id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
users:
type: array
items:
$ref: '#/components/schemas/User'
groupMemberships:
type: array
items:
$ref: '#/components/schemas/GroupMembership'
pagination:
$ref: '#/components/schemas/Pagination'
'400':
$ref: '#/components/responses/Validation'
'401':
$ref: '#/components/responses/Unauthenticated'
'403':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimited'
operationId: groupsMemberships
/groups.add_user:
post:
tags:
- Groups
summary: Add a group member
description: This method allows you to add a user to the specified group.
requestBody:
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: Identifier for the group
format: uuid
userId:
type: string
description: Identifier for the user to add to the group
format: uuid
required:
- id
- userId
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
users:
type: array
items:
$ref: '#/components/schemas/User'
groups:
type: array
items:
$ref: '#/components/schemas/Group'
groupMemberships:
type: array
items:
$ref: '#/components/schemas/GroupMembership'
'400':
$ref: '#/components/responses/Validation'
'401':
$ref: '#/components/responses/Unauthenticated'
'403':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
operationId: groupsAddUser
/groups.remove_user:
post:
tags:
- Groups
summary: Remove a group member
description: This method allows you to remove a user from the group.
requestBody:
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: Identifier for the group
format: uuid
userId:
type: string
description: Identifier for the user to remove from the group
format: uuid
required:
- id
- userId
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
groups:
type: array
items:
$ref: '#/components/schemas/Group'
'400':
$ref: '#/components/responses/Validation'
'401':
$ref: '#/components/responses/Unauthenticated'
'403':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
operationId: groupsRemoveUser
components:
schemas:
Group:
type: object
properties:
id:
type: string
description: Unique identifier for the object.
readOnly: true
format: uuid
name:
type: string
description: The name of this group.
example: Engineering
description:
type:
- string
- 'null'
description: A short description of this group.
externalId:
type:
- string
- 'null'
description: An identifier for this group in an external system, if linked.
disableMentions:
type: boolean
description: Whether mentioning this group is disabled.
externalGroup:
type:
- object
- 'null'
description: Details of the linked external group, if any.
memberCount:
type: number
description: The number of users that are members of the group
example: 11
readOnly: true
createdAt:
type: string
description: The date and time that this object was created
readOnly: true
format: date-time
updatedAt:
type: string
description: The date and time that this object was last changed
readOnly: true
format: date-time
GroupMembership:
type: object
properties:
id:
type: string
description: Unique identifier for the object.
readOnly: true
groupId:
type: string
description: Identifier for the associated group.
readOnly: true
format: uuid
documentId:
type:
- string
- 'null'
description: Identifier for the associated document, if any.
readOnly: true
format: uuid
collectionId:
type:
- string
- 'null'
description: Identifier for the associated collection, if any.
readOnly: true
format: uuid
permission:
$ref: '#/components/schemas/Permission'
sourceId:
type:
- string
- 'null'
description: Identifier for the membership this one was inherited from, if any.
readOnly: true
format: uuid
Error:
type: object
properties:
ok:
type: boolean
example: false
error:
type: string
message:
type: string
status:
type: number
data:
type: object
User:
type: object
properties:
id:
type: string
description: Unique identifier for the object.
readOnly: true
format: uuid
name:
type: string
description: The name of this user, it is migrated from Slack or Google Workspace when the SSO connection is made but can be changed if necessary.
example: Jane Doe
avatarUrl:
type: string
format: uri
description: The URL for the image associated with this user, it will be displayed in the application UI and email notifications.
color:
type: string
description: A color representing the user, used in the UI for avatars without an image.
readOnly: true
email:
type: string
description: The email associated with this user, it is migrated from Slack or Google Workspace when the SSO connection is made but can be changed if necessary.
format: email
readOnly: true
role:
$ref: '#/components/schemas/UserRole'
isSuspended:
type: boolean
description: Whether this user has been suspended.
readOnly: true
lastActiveAt:
type:
- string
- 'null'
description: The last time this user made an API request, this value is updated at most every 5 minutes.
readOnly: true
format: date-time
timezone:
type:
- string
- 'null'
description: The timezone this user has registered.
createdAt:
type: string
description: The date and time that this user first signed in or was invited as a guest.
readOnly: true
format: date-time
updatedAt:
type: string
description: The date and time that this user was last updated.
readOnly: true
format: date-time
deletedAt:
type:
- string
- 'null'
description: The date and time that this user was deleted, if applicable.
readOnly: true
format: date-time
Ability:
description: A single permission granted by a policy
example: true
oneOf:
- type: array
items:
type: string
- type: boolean
Pagination:
type: object
properties:
offset:
type: number
example: 0
limit:
type: number
example: 25
Permission:
type: string
enum:
- read
- read_write
Sorting:
type: object
properties:
sort:
type: string
example: updatedAt
direction:
type: string
example: DESC
enum:
- ASC
- DESC
UserRole:
type: string
enum:
- admin
- member
- viewer
- guest
Policy:
type: object
properties:
id:
type: string
description: Unique identifier for the object this policy references.
format: uuid
readOnly: true
abilities:
type: object
description: The abilities that are allowed by this policy, if an array is returned then the individual ID's in the array represent the memberships that grant the ability.
additionalProperties:
$ref: '#/components/schemas/Ability'
example:
read: true
update: true
delete: false
headers:
RateLimit-Limit:
schema:
type: integer
description: The maximum requests available in the current duration.
Retry-After:
schema:
type: integer
description: Seconds in the future to retry the request, if rate limited.
RateLimit-Reset:
schema:
type: string
description: Timestamp in the future the duration will reset.
RateLimit-Remaining:
schema:
type: integer
description: How many requests are left in the current duration.
responses:
RateLimited:
description: The request was rate limited.
headers:
Retry-After:
$ref: '#/components/headers/Retry-After'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
example: false
error:
type: string
example: rate_limit_exceeded
status:
type: number
example: 429
Validation:
description: The request failed one or more validations.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: The specified resource was not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthenticated:
description: The API key is missing or otherwise invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: The current API key is not authorized to perform this action.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
OAuth2:
type: oauth2
flows:
authorizationCode:
authorizationUrl: https://app.getoutline.com/oauth/authorize
tokenUrl: https://app.getoutline.com/oauth/token
refreshUrl: https://app.getoutline.com/oauth/token
scopes:
read: Read access
write: Write access