> ## Documentation Index
> Fetch the complete documentation index at: https://docs.praxis-ai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a Digital Twin for a Canvas course

> Creates a Digital Twin for one Canvas course, from the course's onboarding page. Only the fields listed in the request schema are used; any other field is ignored. The Digital Twin joins the customer account whose registered domain is exactly the `domain` host; otherwise it is created without an account. The contact address never decides the account, and the answer never names it. Creating a Digital Twin here changes no existing account: the contact administers the new Digital Twin after confirming their address with a code on their first launch into it. To create a Digital Twin while signed in, use `POST /api/user/institution`.




## OpenAPI

````yaml /mdx/api-reference/admin/admin-api.json post /api/auth/createInstitutionForContextid
openapi: 3.0.0
info:
  title: Pria Admin API
  version: 2.0.236
  description: >-
    Pria API Documentation Praxis's developer platform is a core part of our
    mission to empower organizations to grow better. Our APIs are designed to
    enable teams of any shape or size to build robust integrations that help
    them customize and get the most value out of Pria. All Pria APIs are built
    using REST conventions and designed to have a predictable URL structure.
    <br/>  <br/>They use many standard HTTP features, including methods (POST,
    GET, PUT, DELETE) and error response codes.  <br/> <br/>All API calls are
    made under https://hiimpria.ai/api and all responses return standard JSON.
    In these docs, you'll find lists of all available endpoints for a given API,
    along with interactive code blocks for building requests. For walkthroughs
    of basic usage for these APIs, check out the API guides. <br/> <br/>A
    session that a course page (Canvas) opened for an administrator — or that a
    Digital Twin's sign-in provider opened for one of its people — starts with
    user rights in that twin only: until the person confirms it's them with a
    code (POST /api/user/launch-scope/challenge, then /api/auth/mfa-resend and
    /api/auth/mfa-verify), every route outside that twin's day-to-day work
    answers 403 with code LAUNCH_SCOPE_STEP_UP and the twin's id.
servers:
  - url: https://pria.praxislxp.com
    description: Pria API Server
security: []
tags:
  - name: Authentication
    description: User authentication, registration, and password management (/api/auth)
  - name: OAuth
    description: OAuth authentication providers - Google, GitHub, SSO (/api/auth/oauth)
  - name: User
    description: User profile management and account operations (/api/user)
  - name: User Institutions
    description: User institution memberships and switching (/api/user/institution)
  - name: User Tools
    description: Available tools for authenticated users (/api/user/tools)
  - name: Institutions
    description: Institution settings and configuration (/api/user/institution)
  - name: Conversation
    description: AI conversation and Q&A endpoints (/api/ai)
  - name: Realtime
    description: Real-time voice AI and WebRTC sessions (/api/ai/rt)
  - name: Assistant
    description: AI assistant configuration and management (/api/user/assistant)
  - name: History
    description: Conversation history and favorites (/api/user/history)
  - name: RAG
    description: >-
      Document upload, embedding, and retrieval-augmented generation
      (/api/user/files, /api/user/rag)
  - name: Setting
    description: Instance variables and settings management (/api/user/setting)
  - name: Branding
    description: Digital twin branding and customization (/api/agent/branding)
  - name: Agent
    description: Agent engagement and session management (/api/agent)
  - name: SDK Launch
    description: >-
      SDK launch token signing and verification for secure iframe embedding
      (/api/auth/sdk-sign, /api/auth/sdk-verify)
  - name: Testing
    description: Health checks, diagnostics, and test endpoints (/api/test)
  - name: Admin Accounts
    description: Account management for super admins (/api/admin/account)
  - name: Admin Institutions
    description: Institution management for admins (/api/admin/institution)
  - name: Admin Users
    description: User management for admins (/api/admin/user)
  - name: Admin Entitlements
    description: >-
      User-institution relationships and permissions
      (/api/admin/userInstitution)
  - name: Admin Sessions
    description: Session management for admins (/api/admin/session)
  - name: Admin Histories
    description: Conversation history management and analytics (/api/admin/history)
  - name: Admin Assistants
    description: AI assistant management for admins (/api/admin/assistant)
  - name: Admin Questions
    description: Institution question and prompt management (/api/admin/question)
  - name: Admin Tools
    description: Tool configuration management (/api/admin/tool)
  - name: Admin AI Models
    description: AI model configuration (/api/admin/aimodel)
  - name: Admin MCP Servers
    description: Model Context Protocol server management (/api/admin/mcpserver)
  - name: Admin Feedbacks
    description: User feedback management (/api/admin/feedback)
  - name: Admin Uploads
    description: Upload management (/api/admin/upload)
  - name: Admin Charts
    description: Analytics and visualization chart management (/api/admin/chart)
  - name: Admin Memory
    description: Admin inspection and editing of user/instance memory parameters.
  - name: Admin Usage Limits
    description: Per-user usage-vs-cap reporting and account-wide at-limit counts.
paths:
  /api/auth/createInstitutionForContextid:
    post:
      tags:
        - Institutions
      summary: Create a Digital Twin for a Canvas course
      description: >
        Creates a Digital Twin for one Canvas course, from the course's
        onboarding page. Only the fields listed in the request schema are used;
        any other field is ignored. The Digital Twin joins the customer account
        whose registered domain is exactly the `domain` host; otherwise it is
        created without an account. The contact address never decides the
        account, and the answer never names it. Creating a Digital Twin here
        changes no existing account: the contact administers the new Digital
        Twin after confirming their address with a code on their first launch
        into it. To create a Digital Twin while signed in, use `POST
        /api/user/institution`.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateInstitutionRequest'
      responses:
        '200':
          description: Institution created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateInstitutionResponse'
        '400':
          description: >-
            No name, a contact that is not one email address, more than one
            course in ltiContextIds ("A Digital Twin is connected to one course
            at creation."), or the Digital Twin could not be created.
        '409':
          description: >-
            The name is taken ("You created a Digital Twin a moment ago. Please
            wait a minute before creating another one."), or the course named in
            `ltiContextIds` is already held (design 2026-09-28 D2 — a public,
            unsigned route must never take a course off any existing holder): a
            usable Digital Twin (one twin per course) answers "This course is
            already connected to another Digital Twin. Launch it again from
            Canvas to continue."; a DISABLED Digital Twin (or one blocked by its
            account) answers "This course is connected to a Digital Twin that is
            disabled. A teacher must disconnect it from the course first." — see
            `/api/auth/sdk-unlink-course`.
        '429':
          description: Too many requests from this address (5 a minute)
components:
  schemas:
    CreateInstitutionRequest:
      type: object
      required:
        - name
      properties:
        name:
          type: string
          description: Institution name identifier
          example: teacher1.domain.edu.instructure
        contactEmail:
          type: string
          format: email
          description: The Digital Twin's contact — one email address (a list is refused)
          example: jane.doe@praxis-ai.com
        ltiContextIds:
          type: array
          items:
            type: string
          maxItems: 1
          description: >-
            The one Canvas course this twin is created for (defaults to empty
            array if omitted). At most one id is accepted here (400 otherwise);
            an id already held by a usable Digital Twin, OR by a DISABLED
            Digital Twin (or one blocked by its account), is refused before
            anything is written (409, one twin per course — design 2026-09-28
            D2: a public, unsigned route must never take a course off a twin
            someone disabled on purpose) — a teacher disconnects a disabled
            holder first via `/api/auth/sdk-unlink-course`. After creation the
            id is only ever moved off a concurrently added or deleted holder (a
            race with the pre-check above), never off a disabled one.
          example:
            - https://domain.edu/7891278
        publicAuthorizedUrls:
          type: array
          items:
            type: string
          description: Array of authorized public URLs
          example:
            - https://domain.edu
        ainame:
          type: string
          description: AI assistant name
          example: Hugo
        picture:
          type: string
          format: uri
          description: URL to the institution's picture/avatar
          example: >-
            https://hiimpria.ai/uploads/6430736fd62d650040420674/Clarkey20Headshot20Animated_1752713782148.gif
        picture_bg:
          type: string
          description: Background picture URL
          example: ''
        picture_dark_bg:
          type: string
          description: Dark mode background picture URL
          example: ''
        picture_animated:
          type: string
          format: uri
          description: URL to animated picture/avatar
          example: >-
            https://hiimpria.ai/uploads/6430736fd62d650040420674/Clarkey20Headshot20Animated_1752713782148.gif
        prompt:
          type: string
          description: Custom prompt/instructions for the AI persona
          example: ''
        domain:
          type: string
          description: >-
            The launch host; the customer account whose registered domain it is
            exactly
          example: domain.edu
    CreateInstitutionResponse:
      type: object
      properties:
        _id:
          type: string
          description: Unique institution identifier
          example: 68793ef2a8a4a5eaff36e7ca
        name:
          type: string
          example: teacher1.domain.edu.instructure
        picture:
          type: string
          format: uri
          example: >-
            https://hiimpria.ai/uploads/6430736fd62d650040420674/Clarkey20Headshot20Animated_1752713782148.gif
        picture_bg:
          type: string
          example: ''
        picture_dark_bg:
          type: string
          example: ''
        picture_animated:
          type: string
          format: uri
          example: >-
            https://hiimpria.ai/uploads/6430736fd62d650040420674/Clarkey20Headshot20Animated_1752713782148.gif
        elevenlabs_agent_id:
          type: string
          description: ElevenLabs Agent ID for Digital Twin Voice
          example: agent_xxxxxxxxxxxxxxxxxxxx
        credits:
          type: number
          description: Total credits allocated
          example: 50
        status:
          type: string
          enum:
            - active
            - inactive
          example: active
        allowJoining:
          type: string
          enum:
            - disabled
            - account
            - public
          example: disabled
        joiningAdminOnly:
          type: boolean
          example: false
        publicId:
          type: string
          format: uuid
          description: Public identifier for the institution
          example: 2e1006ec-5b59-4431-96d2-b0e1b1022a3a
        publicAuthorizedUrls:
          type: array
          items:
            type: string
          example:
            - https://domain.edu
        ainame:
          type: string
          example: Hugo
        prompt:
          type: string
          example: ''
        contactEmail:
          type: string
          format: email
          example: jane.doe@praxis-ai.com
        creditAward:
          type: number
          example: 0
        poolCredits:
          type: boolean
          example: true
        questionType:
          type: string
          description: Personalization question bank type
          example: CORPORATE
        rtEnabled:
          type: boolean
          description: Whether real-time voice conversations are enabled
          example: false
        rtAdminOnly:
          type: boolean
          description: Whether real-time conversations are restricted to admins
          example: true
        created:
          type: string
          format: date-time
          example: '2025-07-17T18:20:34.330Z'
        id:
          type: string
          example: 68793ef2a8a4a5eaff36e7ca

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.