openapi: 3.2.0
info:
title: Canvas LMS REST User Observees API
version: v1
summary: The complete Canvas LMS REST API, converted from the Swagger 1.2 documents Instructure publishes under https://canvas.instructure.com/doc/api/.
description: The Canvas LMS REST API covers courses, assignments, quizzes, grades, users, enrollments, accounts, files, modules, rubrics, submissions, SIS imports, LTI, analytics and account administration.
contact:
name: Instructure Canvas
url: https://canvas.instructure.com/doc/api/
license:
name: AGPL-3.0
url: https://github.com/instructure/canvas-lms/blob/master/LICENSE
servers:
- url: https://canvas.instructure.com/api
description: Instructure-hosted Canvas (canvas.instructure.com)
- url: https://{canvas_host}/api
description: Any Canvas instance; Canvas is multi-tenant and self-hostable, so the host is the institution's Canvas domain.
variables:
canvas_host:
default: canvas.instructure.com
description: Your institution's Canvas hostname, e.g. school.instructure.com
security:
- bearerAuth: []
- oauth2: []
tags:
- name: User Observees
x-resource: user_observees
externalDocs:
url: https://canvas.instructure.com/doc/api/user_observees.html
paths:
/v1/users/{user_id}/observees:
get:
tags:
- User Observees
operationId: list_linked_observees
summary: List linked observees
description: 'A paginated list of users that the given user is observing. This endpoint returns
users linked to the observer at the account level (such that the observer is automatically
enrolled in observees'' courses); it doesn''t return one-off observer enrollments from
individual courses.
*Note:* all users are allowed to list their own observees. Administrators can list
other users'' observees.
The returned observees will include an attribute "observation_link_root_account_ids", a list
of ids for the root accounts the observer and observee are linked on. The observer will only be able to
observe in courses associated with these root accounts.'
parameters:
- name: user_id
in: path
schema:
type: string
required: true
description: ID
- name: include
in: query
schema:
type: array
items:
type: string
enum:
- avatar_url
required: false
description: '- "avatar_url": Optionally include avatar_url.'
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
type: string
x-canvas-declared-type: User
externalDocs:
url: https://canvas.instructure.com/doc/api/user_observees.html
post:
tags:
- User Observees
operationId: add_observee_with_credentials
summary: Add an observee with credentials
description: 'Register the given user to observe another user, given the observee''s credentials.
*Note:* all users are allowed to add their own observees, given the observee''s
credentials or access token are provided. Administrators can add observees given credentials, access token or
the {api:UserObserveesController#update observee''s id}.'
parameters:
- name: user_id
in: path
schema:
type: string
required: true
description: ID
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
observee[unique_id]:
type: string
description: The login id for the user to observe. Required if access_token is omitted.
observee[password]:
type: string
description: The password for the user to observe. Required if access_token is omitted.
access_token:
type: string
description: The access token for the user to observe. Required if observee[unique_id] or observee[password] are omitted.
pairing_code:
type: string
description: A generated pairing code for the user to observe. Required if the Observer pairing code feature flag is enabled
root_account_id:
type: integer
format: int64
description: 'The ID for the root account to associate with the observation link.
Defaults to the current domain account.
If ''all'' is specified, a link will be created for each root account associated
to both the observer and observee.'
application/x-www-form-urlencoded:
schema:
type: object
properties:
observee[unique_id]:
type: string
description: The login id for the user to observe. Required if access_token is omitted.
observee[password]:
type: string
description: The password for the user to observe. Required if access_token is omitted.
access_token:
type: string
description: The access token for the user to observe. Required if observee[unique_id] or observee[password] are omitted.
pairing_code:
type: string
description: A generated pairing code for the user to observe. Required if the Observer pairing code feature flag is enabled
root_account_id:
type: integer
format: int64
description: 'The ID for the root account to associate with the observation link.
Defaults to the current domain account.
If ''all'' is specified, a link will be created for each root account associated
to both the observer and observee.'
responses:
'200':
description: Success
content:
application/json:
schema:
type: string
x-canvas-declared-type: User
externalDocs:
url: https://canvas.instructure.com/doc/api/user_observees.html
/v1/users/{user_id}/observers:
get:
tags:
- User Observees
operationId: list_linked_observers
summary: List linked observers
description: 'A paginated list of observers linked to a given user.
*Note:* all users are allowed to list their own observers. Administrators can list
other users'' observers.
The returned observers will include an attribute "observation_link_root_account_ids", a list
of ids for the root accounts the observer and observee are linked on. The observer will only be able to
observe in courses associated with these root accounts.'
parameters:
- name: user_id
in: path
schema:
type: string
required: true
description: ID
- name: include
in: query
schema:
type: array
items:
type: string
enum:
- avatar_url
required: false
description: '- "avatar_url": Optionally include avatar_url.'
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
type: string
x-canvas-declared-type: User
externalDocs:
url: https://canvas.instructure.com/doc/api/user_observees.html
/v1/users/{user_id}/observees/{observee_id}:
get:
tags:
- User Observees
operationId: show_observee
summary: Show an observee
description: 'Gets information about an observed user.
*Note:* all users are allowed to view their own observees.'
parameters:
- name: user_id
in: path
schema:
type: string
required: true
description: ID
- name: observee_id
in: path
schema:
type: string
required: true
description: ID
responses:
'200':
description: Success
content:
application/json:
schema:
type: string
x-canvas-declared-type: User
externalDocs:
url: https://canvas.instructure.com/doc/api/user_observees.html
put:
tags:
- User Observees
operationId: add_observee
summary: Add an observee
description: Registers a user as being observed by the given user.
parameters:
- name: user_id
in: path
schema:
type: string
required: true
description: ID
- name: observee_id
in: path
schema:
type: string
required: true
description: ID
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
root_account_id:
type: integer
format: int64
description: 'The ID for the root account to associate with the observation link.
If not specified, a link will be created for each root account associated
to both the observer and observee.'
application/x-www-form-urlencoded:
schema:
type: object
properties:
root_account_id:
type: integer
format: int64
description: 'The ID for the root account to associate with the observation link.
If not specified, a link will be created for each root account associated
to both the observer and observee.'
responses:
'200':
description: Success
content:
application/json:
schema:
type: string
x-canvas-declared-type: User
externalDocs:
url: https://canvas.instructure.com/doc/api/user_observees.html
delete:
tags:
- User Observees
operationId: remove_observee
summary: Remove an observee
description: Unregisters a user as being observed by the given user.
parameters:
- name: user_id
in: path
schema:
type: string
required: true
description: ID
- name: observee_id
in: path
schema:
type: string
required: true
description: ID
- name: root_account_id
in: query
schema:
type: integer
format: int64
required: false
description: If specified, only removes the link for the given root account
responses:
'200':
description: Success
content:
application/json:
schema:
type: string
x-canvas-declared-type: User
externalDocs:
url: https://canvas.instructure.com/doc/api/user_observees.html
/v1/users/{user_id}/observers/{observer_id}:
get:
tags:
- User Observees
operationId: show_observer
summary: Show an observer
description: 'Gets information about an observer.
*Note:* all users are allowed to view their own observers.'
parameters:
- name: user_id
in: path
schema:
type: string
required: true
description: ID
- name: observer_id
in: path
schema:
type: string
required: true
description: ID
responses:
'200':
description: Success
content:
application/json:
schema:
type: string
x-canvas-declared-type: User
externalDocs:
url: https://canvas.instructure.com/doc/api/user_observees.html
/v1/users/{user_id}/observer_pairing_codes:
post:
tags:
- User Observees
operationId: create_observer_pairing_code
summary: Create observer pairing code
description: 'If the user is a student, will generate a code to be used with self registration
or observees APIs to link another user to this student.'
parameters:
- name: user_id
in: path
schema:
type: string
required: true
description: ID
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/PairingCode'
externalDocs:
url: https://canvas.instructure.com/doc/api/user_observees.html
components:
schemas:
PairingCode:
type: object
properties:
user_id:
type: integer
format: int64
example: 2
description: The ID of the user.
code:
type: string
example: abc123
description: The actual code to be sent to other APIs
expires_at:
type: string
example: '2012-05-30T17:45:25Z'
description: When the code expires
workflow_state:
type: string
example: active
description: The current status of the code
description: A code used for linking a user to a student to observe them.
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'Canvas OAuth2 access token sent as "Authorization: Bearer ". See https://canvas.instructure.com/doc/api/file.oauth.html'
oauth2:
type: oauth2
description: Canvas OAuth2. See https://canvas.instructure.com/doc/api/file.oauth.html and https://canvas.instructure.com/doc/api/file.oauth_endpoints.html
flows:
authorizationCode:
authorizationUrl: https://canvas.instructure.com/login/oauth2/auth
tokenUrl: https://canvas.instructure.com/login/oauth2/token
refreshUrl: https://canvas.instructure.com/login/oauth2/token
scopes: {}
externalDocs:
description: Canvas LMS REST API Documentation
url: https://canvas.instructure.com/doc/api/
x-generated-from: https://canvas.instructure.com/doc/api/api-docs.json
x-provenance:
method: derived
derived_by: API Evangelist enrichment pipeline (Swagger 1.2 -> OpenAPI 3.1 conversion)
source: openapi/_original/swagger-1.2/*.json (144 verbatim first-party Swagger 1.2 documents)
source_url: https://canvas.instructure.com/doc/api/api-docs.json
fetched: '2026-09-05'
http_status: 200