Canvas User Observees API

The User Observees API from Canvas — 5 operation(s) for user observees.

Operations 8

Each operation below carries the questions people ask an LLM about it and the instructions they give an agent to run it. Generated by API Evangelist overlay

GET /v1/users/{user_id}/observees List the students a user observes · List linked observees #
Ask an LLM
“Which students is a parent account linked to observe in Canvas?”
“Does the observees list include one-off observer enrollments in a single course?”
Tell an agent
List the observees linked to user {user_id}.
Show who observer {user_id} is watching, including {include}.
POST /v1/users/{user_id}/observees Link an observee using their credentials or pairing code · Add an observee with credentials #
Ask an LLM
“How does a parent link to their child's account with a pairing code?”
“Can I add an observee by entering the student's login and password?”
Tell an agent
Link observer {user_id} to a student using pairing code {pairing_code}.
Add an observee to user {user_id} with login {unique_id} and password {password}.
GET /v1/users/{user_id}/observers List the observers linked to a user · List linked observers #
Ask an LLM
“Which parents or guardians are observing a student?”
“Can a student see who is linked as their observer?”
Tell an agent
List the observers linked to user {user_id}.
Show everyone observing student {user_id}, including {include}.
GET /v1/users/{user_id}/observees/{observee_id} Show one observed user · Show an observee #
Ask an LLM
“How do I get details on a single student I observe?”
“Can an observer view one specific observee's profile?”
Tell an agent
Show observee {observee_id} of user {user_id}.
Get details for the student {observee_id} that {user_id} observes.
PUT /v1/users/{user_id}/observees/{observee_id} Register a user as an observee by id · Add an observee #
Ask an LLM
“As an admin, how do I link an observer to a student by user id without credentials?”
“Can I scope a new observer link to one root account?”
Tell an agent
Make user {user_id} an observer of user {observee_id}.
Link observer {user_id} to student {observee_id} in root account {root_account_id}.
DELETE /v1/users/{user_id}/observees/{observee_id} Unlink an observee from an observer · Remove an observee #
Ask an LLM
“How do I stop a parent from observing a student?”
“Can I remove an observer link only for one root account?”
Tell an agent destructive · confirm first
Remove observee {observee_id} from observer {user_id}.
Unlink {user_id} from observing {observee_id} in root account {root_account_id}.
GET /v1/users/{user_id}/observers/{observer_id} Show one observer of a user · Show an observer #
Ask an LLM
“How do I see details about a specific parent observing my account?”
“Can a student look up one of their observers by id?”
Tell an agent
Show observer {observer_id} of user {user_id}.
Get details on {observer_id}, who observes student {user_id}.
POST /v1/users/{user_id}/observer_pairing_codes Generate an observer pairing code for a student · Create observer pairing code #
Ask an LLM
“How does a student generate a code so a parent can link to them?”
“Can I create a pairing code for parent self-registration?”
Tell an agent
Create an observer pairing code for student {user_id}.
Generate a parent pairing code for user {user_id}.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/canvas:canvas-user-observees-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

canvas-user-observees-api-openapi.yml Raw ↑
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 <tt>observee[unique_id]</tt> or <tt>observee[password]</tt> 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 <tt>observee[unique_id]</tt> or <tt>observee[password]</tt> 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 <token>". 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