Outline Users API
`Users` represent an individual with access to the knowledge base. Users can be created automatically when signing in with SSO or when a user is invited via email.
`Users` represent an individual with access to the knowledge base. Users can be created automatically when signing in with SSO or when a user is invited via email.
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-users-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 Users 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: Users
description: '`Users` represent an individual with access to the knowledge base. Users
can be created automatically when signing in with SSO or when a user is
invited via email.'
paths:
/users.invite:
post:
tags:
- Users
summary: Invite users
description: Send email invitations to one or more users to join the workspace. Invitations include a link to create an account and join the workspace.
requestBody:
content:
application/json:
schema:
type: object
properties:
invites:
type: array
items:
$ref: '#/components/schemas/Invite'
suppressEmail:
type: boolean
description: If true, the invitation emails will not be sent to the invited users. Defaults to false.
required:
- invites
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
sent:
type: array
items:
$ref: '#/components/schemas/Invite'
users:
type: array
items:
$ref: '#/components/schemas/User'
'401':
$ref: '#/components/responses/Unauthenticated'
'403':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimited'
operationId: usersInvite
/users.info:
post:
tags:
- Users
summary: Retrieve a user
description: Retrieve the details of a user by their unique identifier, including their name, email, avatar, and role within the workspace.
requestBody:
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: Unique identifier for the user.
format: uuid
required:
- id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/User'
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: usersInfo
/users.list:
post:
tags:
- Users
summary: List all users
description: List and filter all the users in the workspace
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Pagination'
- $ref: '#/components/schemas/Sorting'
- type: object
properties:
query:
type: string
example: jane
emails:
type: array
description: Array of emails
items:
type: string
example:
- jane.crandall@mail.com
- prudence.crandall@mail.com
filter:
type: string
description: The status to filter by
enum:
- all
- invited
- active
- suspended
role:
$ref: '#/components/schemas/UserRole'
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/User'
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: usersList
/users.update:
post:
tags:
- Users
summary: Update a user
description: Update a users name or avatar. If no `id` is passed then the user associated with the authentication will be updated by default.
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
language:
type: string
format: BCP47
avatarUrl:
type: string
format: uri
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/User'
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: usersUpdate
/users.update_role:
post:
tags:
- Users
summary: Change a users role
description: Change the role of a user, only available to admin authorization.
requestBody:
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: Unique identifier for the user.
format: uuid
role:
$ref: '#/components/schemas/UserRole'
required:
- id
- role
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/User'
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: usersUpdateRole
/users.suspend:
post:
tags:
- Users
summary: Suspend a user
description: Suspending a user prevents the user from signing in. Users that are suspended are also not counted against billing totals in the hosted version.
requestBody:
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: Unique identifier for the user.
format: uuid
required:
- id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/User'
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: usersSuspend
/users.activate:
post:
tags:
- Users
summary: Activate a user
description: Activating a previously suspended user allows them to signin again. Users that are activated will cause billing totals to be re-calculated in the hosted version.
requestBody:
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: Unique identifier for the user.
format: uuid
required:
- id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/User'
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: usersActivate
/users.delete:
post:
tags:
- Users
summary: Delete a user
description: Deleting a user removes the object entirely. In almost every circumstance it is preferable to suspend a user, as a deleted user can be recreated by signing in with SSO again.
requestBody:
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: Unique identifier for the user.
format: uuid
required:
- id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
example: true
'401':
$ref: '#/components/responses/Unauthenticated'
'403':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
operationId: usersDelete
components:
schemas:
Pagination:
type: object
properties:
offset:
type: number
example: 0
limit:
type: number
example: 25
Ability:
description: A single permission granted by a policy
example: true
oneOf:
- type: array
items:
type: string
- type: boolean
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
Error:
type: object
properties:
ok:
type: boolean
example: false
error:
type: string
message:
type: string
status:
type: number
data:
type: object
Invite:
type: object
properties:
name:
type: string
description: The full name of the user being invited
email:
type: string
description: The email address to invite
role:
$ref: '#/components/schemas/UserRole'
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
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
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
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'
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.
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