# praxis-ai > Pria is an AI-powered digital twin that transforms human expertise into scalable, intelligent assistants for organizations across industries. Originally designed for education, Pria has evolved into a comprehensive middleware solution that captures, preserves, and amplifies institutional knowledge through personalized AI assistants.Pria seamlessly integrates into existing workflows - from learning management systems like Canvas and Moodle to enterprise platforms, websites, and business applications - providing 24/7 expert guidance for complex decision-making, knowledge transfer, and operational excellence. Powered by advanced orchestration technology, Pria leverages multiple Large Language Models (Claude, GPT-4, Gemini, Grok) and natural language processing to create human-like digital twins that understand context, maintain conversation continuity, and execute sophisticated agentic workflows through custom assistant personas. ## Docs - [Create SSO provider](https://docs.praxis-ai.com/api-reference/admin--sso-providers/create-sso-provider.md): Creates a new SSO provider for an institution. One provider per institution. - [Delete SSO provider](https://docs.praxis-ai.com/api-reference/admin--sso-providers/delete-sso-provider.md) - [Get SSO provider by ID](https://docs.praxis-ai.com/api-reference/admin--sso-providers/get-sso-provider-by-id.md) - [List SSO providers](https://docs.praxis-ai.com/api-reference/admin--sso-providers/list-sso-providers.md): Returns all SSO providers scoped by RAP. Client secrets are masked. - [Test SSO provider connectivity](https://docs.praxis-ai.com/api-reference/admin--sso-providers/test-sso-provider-connectivity.md): Attempts to reach the token endpoint to verify configuration. - [Update SSO provider](https://docs.praxis-ai.com/api-reference/admin--sso-providers/update-sso-provider.md): Updates an SSO provider. Institution cannot be changed. - [Adjust an account's credit balance (super admin only)](https://docs.praxis-ai.com/api-reference/admin-accounts/adjust-an-accounts-credit-balance-super-admin-only.md): Adds or subtracts credits from the given account. Records an AccountTransfer with a mandatory note for audit. Reserved for super administrators - regular admins and account managers receive 403. - [Create a new account](https://docs.praxis-ai.com/api-reference/admin-accounts/create-a-new-account.md): Creates a new account in the system - [Delete account](https://docs.praxis-ai.com/api-reference/admin-accounts/delete-account.md): Removes an account from the system - [Get account by ID](https://docs.praxis-ai.com/api-reference/admin-accounts/get-account-by-id.md): Retrieves details of a specific account - [Get list of account transfers](https://docs.praxis-ai.com/api-reference/admin-accounts/get-list-of-account-transfers.md): Retrieves account transfer history with optional filtering - [Search and retrieve accounts](https://docs.praxis-ai.com/api-reference/admin-accounts/search-and-retrieve-accounts.md): Retrieves a paginated list of accounts with institution usage statistics - [Transfer credits between account and institution](https://docs.praxis-ai.com/api-reference/admin-accounts/transfer-credits-between-account-and-institution.md): Transfers credits from the parent account to one of its institutions (positive credits value) or reclaims credits from the institution back to the account (negative credits value). The institution must belong to the specified account. Both the account and institution must have sufficient credits for… - [Update account](https://docs.praxis-ai.com/api-reference/admin-accounts/update-account.md): Updates an existing account - [Create a new AI model](https://docs.praxis-ai.com/api-reference/admin-ai-models/create-a-new-ai-model.md): Creates a new AI model configuration. The handler validates the `client_library` / `api_url` / `api_key` combination via `validateAIModelConfig` before saving — openai_cli requires both `api_url` and `api_key`; mistral_cli and xai_cli require `api_key`; bedrock_cli requires neither (uses AWS credent… - [Delete AI model](https://docs.praxis-ai.com/api-reference/admin-ai-models/delete-ai-model.md): Soft-deletes an AI model. The handler prefixes the document's `name` with the current timestamp and sets `status` to `deleted`; the record is not physically removed. - [Get AI model by ID](https://docs.praxis-ai.com/api-reference/admin-ai-models/get-ai-model-by-id.md): Retrieves details of a specific AI model, with the `institution` field populated to `{ _id, name, ainame, picture }`. - [Get list of AI models](https://docs.praxis-ai.com/api-reference/admin-ai-models/get-list-of-ai-models.md): Retrieves AI models with optional filtering. Two response shapes: - [Update AI model](https://docs.praxis-ai.com/api-reference/admin-ai-models/update-ai-model.md): Partially updates an existing AI model configuration. Only fields present in the request body are written. The handler merges `client_library` / `api_url` / `api_key` with the stored document and re-validates the resulting combination before persisting. - [Retrieve filtered list of assistants](https://docs.praxis-ai.com/api-reference/admin-assistants/retrieve-filtered-list-of-assistants.md): Fetches a list of AI assistants based on specified filters, with optional minimal data return - [Delete chart](https://docs.praxis-ai.com/api-reference/admin-charts/delete-chart.md): Removes a chart - [Get chart by ID](https://docs.praxis-ai.com/api-reference/admin-charts/get-chart-by-id.md): Retrieves a specific chart - [Get list of charts](https://docs.praxis-ai.com/api-reference/admin-charts/get-list-of-charts.md): Retrieves charts with optional filtering - [Delete a user institution by ID](https://docs.praxis-ai.com/api-reference/admin-entitlements/delete-a-user-institution-by-id.md): Removes a user institution from the system. Requires admin privileges. - [Enroll users into an institution](https://docs.praxis-ai.com/api-reference/admin-entitlements/enroll-users-into-an-institution.md): Creates user-institution memberships for the specified users. Skips users who are already enrolled or invalid. Requires users.add entitlement for the target institution. - [Get user institutions by user ID](https://docs.praxis-ai.com/api-reference/admin-entitlements/get-user-institutions-by-user-id.md): Retrieves all institutions associated with a specific user ID (admin endpoint) - [Get users associated with institutions](https://docs.praxis-ai.com/api-reference/admin-entitlements/get-users-associated-with-institutions.md): Retrieves a list of users and their relationships with institutions based on search criteria - [Get users eligible to enroll in an institution](https://docs.praxis-ai.com/api-reference/admin-entitlements/get-users-eligible-to-enroll-in-an-institution.md): Returns users who are not yet members of the specified institution. Results are capped at 100. If no search term is provided, returns the first 100 eligible users. With a search term (2+ chars), filters by name or email. - [Update user institution attributes such as account type, status, etc.](https://docs.praxis-ai.com/api-reference/admin-entitlements/update-user-institution-attributes-such-as-account-type-status-etc.md): Updates the account type for a specific user in the institution - [Delete feedback](https://docs.praxis-ai.com/api-reference/admin-feedbacks/delete-feedback.md): Removes a feedback record - [Get feedback by ID](https://docs.praxis-ai.com/api-reference/admin-feedbacks/get-feedback-by-id.md): Retrieves details of a specific feedback - [Search and retrieve feedbacks](https://docs.praxis-ai.com/api-reference/admin-feedbacks/search-and-retrieve-feedbacks.md): Retrieves a paginated list of user feedbacks based on search criteria - [Update feedback](https://docs.praxis-ai.com/api-reference/admin-feedbacks/update-feedback.md): Updates feedback status and admin notes - [Compare specific institutions side-by-side](https://docs.praxis-ai.com/api-reference/admin-histories/compare-specific-institutions-side-by-side.md): Runs parallel per-institution aggregation queries for side-by-side comparison. Requires explicit institution IDs. Optionally includes a total series. Returns pre-resolved institution names for display. - [Delete a specific history record](https://docs.praxis-ai.com/api-reference/admin-histories/delete-a-specific-history-record.md): Removes a history entry from the system using its unique identifier - [Delete multiple histories](https://docs.praxis-ai.com/api-reference/admin-histories/delete-multiple-histories.md): Deletes multiple history records based on criteria - [Get conversation model usage distribution](https://docs.praxis-ai.com/api-reference/admin-histories/get-conversation-model-usage-distribution.md): Returns the top 30 most-used conversation models within the date range and institution scope. Results are cached. - [Get peak usage heatmap for conversations](https://docs.praxis-ai.com/api-reference/admin-histories/get-peak-usage-heatmap-for-conversations.md): Returns conversation counts grouped by day-of-week and hour-of-day. Useful for identifying peak usage patterns. Results are cached. - [Get time-series chart data for histories](https://docs.praxis-ai.com/api-reference/admin-histories/get-time-series-chart-data-for-histories.md): Optimized endpoint for time-series charts (bar, line, area, heatmap, scatter). Supports count, credits, usage, cached, and price dimensions. Uses a 2-step top-N query to avoid fetching data for all institutions. - [Get totals chart data for histories](https://docs.praxis-ai.com/api-reference/admin-histories/get-totals-chart-data-for-histories.md): Optimized endpoint for total/summary charts (pie, donut, radialBar, radar, polarArea). No time bucketing — returns aggregated totals per institution sorted by value. Top-N handled entirely in MongoDB via $sort + $limit. - [Get unique user count chart data](https://docs.praxis-ai.com/api-reference/admin-histories/get-unique-user-count-chart-data.md): Dedicated endpoint for dimension=users queries. Uses a double-$group pipeline to count unique users per time bucket and institution. - [Get weekly chart data for admin histories](https://docs.praxis-ai.com/api-reference/admin-histories/get-weekly-chart-data-for-admin-histories.md): Retrieves chart data for administrative history tracking with configurable granularity and time range - [Lazy-fetch the bulk thinking/reasoning array for a single History record (admin)](https://docs.praxis-ai.com/api-reference/admin-histories/lazy-fetch-the-bulk-thinkingreasoning-array-for-a-single-history-record-admin.md): List endpoints project out the bulk `thinking` text and expose only a `hasThinking` boolean. This endpoint returns the full thinking array on demand. Permission mirrors `getHistoryById`: the History owner sees their own; otherwise the requesting admin must have the `histories.list` entitlement on th… - [Long-format per-user-per-period usage extract](https://docs.praxis-ai.com/api-reference/admin-histories/long-format-per-user-per-period-usage-extract.md): Aggregates query count and credit usage per `(user, institution, period)` for admin reporting / CSV export. One row per non-zero usage bucket. Capped at 5000 rows; the response sets `truncated: true` when the cap is reached. Excludes histories that the user has flagged as `forgotten`. - [Retrieve conversation histories for admin users](https://docs.praxis-ai.com/api-reference/admin-histories/retrieve-conversation-histories-for-admin-users.md): Fetches conversation history data filtered by institution, user search term, and result limit - [Retrieve detailed history record by ID](https://docs.praxis-ai.com/api-reference/admin-histories/retrieve-detailed-history-record-by-id.md): Get comprehensive information about a specific conversation history record including user details, institution info, usage metrics, and conversation data - [Adjust an institution's credit balance (super admin only)](https://docs.praxis-ai.com/api-reference/admin-institutions/adjust-an-institutions-credit-balance-super-admin-only.md): Adds or subtracts credits from the given institution. Records an AccountTransfer with a mandatory note for audit. If the institution has a parent account, by default credits are transferred zero-sum from that account (the account's balance is decremented by the same amount and the AccountTransfer re… - [Award free credits to institution](https://docs.praxis-ai.com/api-reference/admin-institutions/award-free-credits-to-institution.md): Awards free credits to a specific institution - [Clone an institution](https://docs.praxis-ai.com/api-reference/admin-institutions/clone-an-institution.md): Creates a copy of an existing institution with all settings - [Create a new institution](https://docs.praxis-ai.com/api-reference/admin-institutions/create-a-new-institution.md): Creates a new institution in the system - [Delete an institution](https://docs.praxis-ai.com/api-reference/admin-institutions/delete-an-institution.md): Removes an institution from the system - [Disable agent workspace desired state](https://docs.praxis-ai.com/api-reference/admin-institutions/disable-agent-workspace-desired-state.md): Marks the instance agent workspace as disabled. MVP disable does not stop existing ECS tasks or delete EFS access points; operators must reap runtime resources separately until lifecycle reaping is implemented. - [Generate about text for institution](https://docs.praxis-ai.com/api-reference/admin-institutions/generate-about-text-for-institution.md): Uses AI to generate an about section based on institution questions - [Get agent workspace state for an instance](https://docs.praxis-ai.com/api-reference/admin-institutions/get-agent-workspace-state-for-an-instance.md): Returns the desired agent workspace state for one Digital Twin instance. Requires admin access and institutions.edit RAP for the target instance. - [Get institution details by ID](https://docs.praxis-ai.com/api-reference/admin-institutions/get-institution-details-by-id.md): Retrieves detailed information about a specific institution including configuration, credits, and settings - [Make an instance an agent](https://docs.praxis-ai.com/api-reference/admin-institutions/make-an-instance-an-agent.md): Enables agent desired state for one Digital Twin instance and starts workspace provisioning using the configured backend mode. The request body is whitelisted; runtime fields such as desktopPath and externalId are server-owned. - [Reassign an institution to a different account](https://docs.praxis-ai.com/api-reference/admin-institutions/reassign-an-institution-to-a-different-account.md): Clean-room endpoint with strict field whitelisting. Only the `account` field is accepted. Non-super users must have access to both the source institution and the target account. Passing `account: null` detaches the institution from its parent account — super users only. - [Retrieve list of institutions](https://docs.praxis-ai.com/api-reference/admin-institutions/retrieve-list-of-institutions.md): Get a list of all institutions with their details and statistics - [Retry failed agent workspace provisioning](https://docs.praxis-ai.com/api-reference/admin-institutions/retry-failed-agent-workspace-provisioning.md): Re-runs provisioning only when the current agent status is failed; other lifecycle states are idempotent no-ops. - [Update an institution configuration](https://docs.praxis-ai.com/api-reference/admin-institutions/update-an-institution-configuration.md): Updates the configuration settings for a specific institution - [Create a new MCP server](https://docs.praxis-ai.com/api-reference/admin-mcp-servers/create-a-new-mcp-server.md): Creates a new Model Context Protocol server configuration - [Delete MCP server](https://docs.praxis-ai.com/api-reference/admin-mcp-servers/delete-mcp-server.md): Removes an MCP server configuration - [Get list of MCP servers](https://docs.praxis-ai.com/api-reference/admin-mcp-servers/get-list-of-mcp-servers.md): Retrieves all MCP servers with optional filtering - [Get MCP server by ID](https://docs.praxis-ai.com/api-reference/admin-mcp-servers/get-mcp-server-by-id.md): Retrieves details of a specific MCP server - [Update MCP server](https://docs.praxis-ai.com/api-reference/admin-mcp-servers/update-mcp-server.md): Updates an existing MCP server configuration - [Bulk hard-delete memory parameters for a user (filter-aware).](https://docs.praxis-ai.com/api-reference/admin-memory/bulk-hard-delete-memory-parameters-for-a-user-filter-aware.md): When `ids` is provided, deletes only those rows after re-checking auth per row. Otherwise filters by namespace/shared. - [Bulk hard-delete shared memory parameters for an instance (filter-aware).](https://docs.praxis-ai.com/api-reference/admin-memory/bulk-hard-delete-shared-memory-parameters-for-an-instance-filter-aware.md) - [Edit a single memory parameter (whitelisted fields only).](https://docs.praxis-ai.com/api-reference/admin-memory/edit-a-single-memory-parameter-whitelisted-fields-only.md): Whitelist: key_value, key_description, shared. key_name and key_namespace cannot be edited via PATCH because they are part of the unique index; to rename, delete + recreate. - [Hard-delete a single memory parameter.](https://docs.praxis-ai.com/api-reference/admin-memory/hard-delete-a-single-memory-parameter.md) - [List memory parameters for a user, grouped by institution.](https://docs.praxis-ai.com/api-reference/admin-memory/list-memory-parameters-for-a-user-grouped-by-institution.md): Returns memory rows visible to the requesting admin. Super sees every row for the target. Non-super admins see rows in institutions where they hold users.edit, plus the target's personal rows iff they hold users.edit on at least one institution where the target has membership. - [List shared memory parameters for an instance.](https://docs.praxis-ai.com/api-reference/admin-memory/list-shared-memory-parameters-for-an-instance.md): Requires users.edit on the target institution (super bypasses). - [List payments](https://docs.praxis-ai.com/api-reference/admin-payments/list-payments.md): Retrieves a paginated list of Stripe payments with optional filtering by account, institution, or user search - [Analyze a prompt](https://docs.praxis-ai.com/api-reference/admin-questions/analyze-a-prompt.md): Analyzes a prompt for quality and provides suggestions - [Generate institution system prompt](https://docs.praxis-ai.com/api-reference/admin-questions/generate-institution-system-prompt.md): Generates a system prompt based on institution questions - [Retrieve institution questions](https://docs.praxis-ai.com/api-reference/admin-questions/retrieve-institution-questions.md): Get questions associated with a specific institution, with option for minimum data - [Retrieve institutional assessment questions](https://docs.praxis-ai.com/api-reference/admin-questions/retrieve-institutional-assessment-questions.md): Fetches a list of questions used for institutional assessments, with optional filtering for minimal data - [Get session analytics charts](https://docs.praxis-ai.com/api-reference/admin-sessions/get-session-analytics-charts.md): Returns distribution charts for OS, browser, device type, daily activity timeline, and a day-of-week/hour-of-day peak usage heatmap. Results are cached. When more than 100k sessions match the filter and no institution/account filter is set, the date range is auto-narrowed to 3 days for memory safety… - [Get session by ID](https://docs.praxis-ai.com/api-reference/admin-sessions/get-session-by-id.md): Retrieves a single session by Mongo ObjectId. user and institution are populated with trimmed projections. - [Search and retrieve active sessions](https://docs.praxis-ai.com/api-reference/admin-sessions/search-and-retrieve-active-sessions.md): Retrieves a paginated list of user sessions based on search criteria - [Soft-delete a session](https://docs.praxis-ai.com/api-reference/admin-sessions/soft-delete-a-session.md): Sets the session's status to 'deleted' (soft delete tombstone). The row is preserved in the database. - [Create a new tool](https://docs.praxis-ai.com/api-reference/admin-tools/create-a-new-tool.md): Creates a new tool definition. Super admin only. - [Delete tool](https://docs.praxis-ai.com/api-reference/admin-tools/delete-tool.md): Soft-deletes a tool by setting `status` to `deleted` and prefixing the name with a timestamp to free the unique name slot. Super admin only. - [Get tool by ID](https://docs.praxis-ai.com/api-reference/admin-tools/get-tool-by-id.md): Retrieves a single tool. Super admin only. - [List tools](https://docs.praxis-ai.com/api-reference/admin-tools/list-tools.md): Returns the tool list. Two modes: - **Full mode** (default): paginated, super admin only. Returns full tool objects with `unavailable`/`unavailableReason` enrichment for Google-service tools based on the caller's institution Google Cloud configuration. - **Minimum mode** (`minimum=true`): no pag… - [Update tool](https://docs.praxis-ai.com/api-reference/admin-tools/update-tool.md): Updates an existing tool. Super admin only. Performs a partial update with the fields supplied in the body. Note: if the target tool does not exist the handler returns 400 (not 404). - [Get upload by ID](https://docs.praxis-ai.com/api-reference/admin-uploads/get-upload-by-id.md): Retrieves a single upload by Mongo ObjectId with user and institution populated. The thumbnail Buffer is returned base64-encoded, and if the embeddings DB connection is ready an embeddings array of chunk text (sorted by chunkIndex) is attached. - [Create a new user in the admin system. Users get 15 credits when created. When plan set to 'sdk' with a valid institution (your digital twin _id), user is automatically enrolled into the instance](https://docs.praxis-ai.com/api-reference/admin-users/create-a-new-user-in-the-admin-system-users-get-15-credits-when-created-when-plan-set-to-sdk-with-a-valid-institution-your-digital-twin-_id-user-is-automatically-enrolled-into-the-instance.md) - [Delete a user by ID](https://docs.praxis-ai.com/api-reference/admin-users/delete-a-user-by-id.md): Permanently removes a user from the system. This is an admin-only operation. - [Get user details by ID (Admin only)](https://docs.praxis-ai.com/api-reference/admin-users/get-user-details-by-id-admin-only.md): Retrieves detailed information about a specific user. Requires admin privileges. - [Search and retrieve users for admin management](https://docs.praxis-ai.com/api-reference/admin-users/search-and-retrieve-users-for-admin-management.md): Retrieves a list of users based on search criteria including institution, account type, and search terms - [List a target user's active MFA-trusted devices (admin)](https://docs.praxis-ai.com/api-reference/admin/list-a-target-users-active-mfa-trusted-devices-admin.md): Same shape as the user-self endpoint, but admin-gated: the caller must hold `users.edit` against the target's institution (super admins bypass). Listing is useful before deciding to revoke an individual device for the user. - [Read the MFA audit log for a target user (super-only)](https://docs.praxis-ai.com/api-reference/admin/read-the-mfa-audit-log-for-a-target-user-super-only.md): Returns up to `limit` (default 50, max 200) MFA audit events for the target user, ordered by `created` descending. Use the `before` parameter (ISO timestamp) for pagination — pass the oldest `created` from the previous page to fetch the next. - [Revoke ALL trusted devices for a target user (admin)](https://docs.praxis-ai.com/api-reference/admin/revoke-all-trusted-devices-for-a-target-user-admin.md): Revokes every active trusted-device row for the target. Audit log records the admin's id and `actorType: 'admin'` (or 'super'). Does NOT invalidate the target's existing JWT — only forces fresh MFA on their next login (design Q9 grandfather rule). - [Get current user's agent workspace status](https://docs.praxis-ai.com/api-reference/agents/get-current-users-agent-workspace-status.md): Returns the agent desired state from the user's active instance plus the per-user workspace read model. This route requires normal authentication, not global super access. - [Issue a short-lived ticket for the caller's KasmVNC desktop](https://docs.praxis-ai.com/api-reference/agents/issue-a-short-lived-ticket-for-the-callers-kasmvnc-desktop.md): Mints a single-use, 60-second JWT ticket the browser uses to open a WebSocket to the in-band desktop proxy at `/api/agents/workspace/vnc/`. The endpoint enforces: - [OpenAI-compatible Chat Completions endpoint (inbound integration)](https://docs.praxis-ai.com/api-reference/ai/openai-compatible-chat-completions-endpoint-inbound-integration.md): OpenAI-compatible streaming chat completions endpoint. Accepts a `messages[]` array, extracts the last user message as the active turn, replays any prior user/assistant messages as conversation history (sanitized for Bedrock's alternating-role requirement), runs the active turn through Praxis's RAG/… - [Add an assistant to the caller's favorites](https://docs.praxis-ai.com/api-reference/assistants/add-an-assistant-to-the-callers-favorites.md): Appends the given assistant ObjectId to the authenticated user's `favoriteAssistants` list. Idempotent — if the id is already present, the list is returned unchanged and no save is performed. Consumed by the Pria input-pill Assistants submenu, which reads the populated favorites from `/api/user/refr… - [Create a new assistant](https://docs.praxis-ai.com/api-reference/assistants/create-a-new-assistant.md): Creates a new AI assistant with the specified configuration. The request body is passed directly to the Mongoose model constructor. Only the name field is required by the schema (other fields have defaults). If institution is an empty string it is removed from the body. Auto-reset logic is applied b… - [Get a single assistant by ID](https://docs.praxis-ai.com/api-reference/assistants/get-a-single-assistant-by-id.md): Retrieves a single assistant by its ObjectId. Accessible to (a) the assistant owner, (b) admin users with the relevant entitlement on the assistant's institution, or (c) super users. Standard users who don't own the assistant get 403. The response includes populated user_data (email, fname, lname, i… - [Increment an assistant's liked count](https://docs.praxis-ai.com/api-reference/assistants/increment-an-assistants-liked-count.md): Increments the liked_count field of an assistant using MongoDB $inc operator. The liked_count value from the request body is added to the current count (can be negative to decrement). Any authenticated user can call this endpoint. - [Remove an assistant from the caller's favorites](https://docs.praxis-ai.com/api-reference/assistants/remove-an-assistant-from-the-callers-favorites.md): Removes the given assistant ObjectId from the authenticated user's `favoriteAssistants` list. Tolerant — the id does NOT need to be currently favorited; calling DELETE on a non-favorited id (or a malformed id) is a no-op that still returns 200 with the current list. - [Search and retrieve assistants](https://docs.praxis-ai.com/api-reference/assistants/search-and-retrieve-assistants.md): Retrieves a filtered list of assistants based on type, name, and the requesting user's permissions. Results include system assistants (user=null), the user's own assistants, institution-shared assistants, and account-shared assistants from sibling institutions. Assistants with status "deleted" are a… - [Soft-delete an assistant](https://docs.praxis-ai.com/api-reference/assistants/soft-delete-an-assistant.md): Performs a soft delete on an assistant by setting its status to "deleted" and prepending a timestamp to the name (to free the unique index slot). Requires admin or super user privileges. System assistants (user=null) cannot be deleted through this endpoint and return a 403 error. Admin users can onl… - [Update an existing assistant](https://docs.praxis-ai.com/api-reference/assistants/update-an-existing-assistant.md): Updates an existing assistant by its ObjectId. Accepts any non-empty object as the request body and passes it directly to MongoDB updateOne. No field-level validation is performed beyond requiring a non-empty body. Special handling for institution and user fields when sent as empty strings uses $uns… - [Upload one or more audio segments for transcription and vault ingestion](https://docs.praxis-ai.com/api-reference/audio-notes/upload-one-or-more-audio-segments-for-transcription-and-vault-ingestion.md): Accepts 1..20 audio segments (audio/webm, audio/ogg, audio/mp4, audio/mpeg, audio/wav). Each segment is capped at 50 MB. When `combine=true` and all segments share a single mimetype, the server concatenates them losslessly via ffmpeg before ingestion. Returns 202 immediately; transcription runs asyn… - [Abandon the current MFA challenge (user clicked Cancel)](https://docs.praxis-ai.com/api-reference/authentication/abandon-the-current-mfa-challenge-user-clicked-cancel.md): Marks the challenge as invalidated server-side so it can no longer be used for /mfa-verify or /mfa-resend. Idempotent — calling it on an already-cancelled / expired / verified challenge still returns 200. - [Automatic user signup and authentication](https://docs.praxis-ai.com/api-reference/authentication/automatic-user-signup-and-authentication.md): Creates or authenticates a user account automatically based on CMS/LMS integration data. Typically called after SDK launch token verification (see `/api/auth/sdk-verify`). - [Change user password](https://docs.praxis-ai.com/api-reference/authentication/change-user-password.md): Changes the user's password using a valid reset code. - [Exchange a Pria API key for a JWT](https://docs.praxis-ai.com/api-reference/authentication/exchange-a-pria-api-key-for-a-jwt.md): Validates the `x-api-key` header against the hashed key stored on the user record and returns a regular Pria JWT (`token`) plus a minimal `profile` envelope. The JWT is identical in shape and lifetime to the one issued by `POST /api/auth/signin` — every other authenticated endpoint accepts it via `A… - [Generate Digital Twin instructions from Q&A](https://docs.praxis-ai.com/api-reference/authentication/generate-digital-twin-instructions-from-q&a.md): Takes interview question/answer pairs and generates AI-powered persona instructions for a Digital Twin being created. Used during the creation wizard before the institution exists. Requires JWT authentication. - [Generate password reset code](https://docs.praxis-ai.com/api-reference/authentication/generate-password-reset-code.md): Sends a password reset code to the user's email address. - [Register a new user](https://docs.praxis-ai.com/api-reference/authentication/register-a-new-user.md): Creates a new user account with email and password authentication. - [Request a new MFA code for the current challenge](https://docs.praxis-ai.com/api-reference/authentication/request-a-new-mfa-code-for-the-current-challenge.md): Invalidates the current challenge and issues a fresh one with the same loginContext (so the verify step still lands you in the same branding / institution context). The new challenge has its own 5-min TTL and its own 5-attempt cap. - [Submit a 6-digit MFA code to complete login](https://docs.praxis-ai.com/api-reference/authentication/submit-a-6-digit-mfa-code-to-complete-login.md): Second leg of the MFA login flow. The first leg (POST /api/auth/signin or /autosignup) returned `{mfaRequired: true, challengeId, maskedEmail}` and emailed a 6-digit code. This endpoint accepts the typed code, and on success returns the same shape as a normal signin response (token + profile) and se… - [User authentication and sign-in](https://docs.praxis-ai.com/api-reference/authentication/user-authentication-and-sign-in.md): Authenticates a user with email and password, and returns a JWT token along with the user profile. - [Validate account activation code](https://docs.praxis-ai.com/api-reference/authentication/validate-account-activation-code.md): Validates whether the provided activation code is valid for the user. - [Validate password reset code](https://docs.praxis-ai.com/api-reference/authentication/validate-password-reset-code.md): Validates whether the provided reset code is valid for the user. - [Create subscription checkout session](https://docs.praxis-ai.com/api-reference/billing/create-subscription-checkout-session.md): Creates a Stripe checkout session and returns the full session object. The client should redirect the user to the session URL to complete payment. - [Get checkout session result](https://docs.praxis-ai.com/api-reference/billing/get-checkout-session-result.md): Retrieves details of a completed Stripe checkout session for displaying a purchase confirmation screen. Verifies the session belongs to the authenticated user. - [Get current subscription plan](https://docs.praxis-ai.com/api-reference/billing/get-current-subscription-plan.md): Retrieves the current user's Stripe subscription plan details and status - [Retrieve branding information for a digital twin](https://docs.praxis-ai.com/api-reference/branding/retrieve-branding-information-for-a-digital-twin.md): Gets branding details for an institution's digital twin instance. Use this API to personalize your embedded application with the institution's custom avatar, background images, AI name, and description. - [Add files to a collection](https://docs.praxis-ai.com/api-reference/collections/add-files-to-a-collection.md) - [Bulk action on files or collections](https://docs.praxis-ai.com/api-reference/collections/bulk-action-on-files-or-collections.md) - [Create a new collection](https://docs.praxis-ai.com/api-reference/collections/create-a-new-collection.md) - [Delete collection and all contained files](https://docs.praxis-ai.com/api-reference/collections/delete-collection-and-all-contained-files.md) - [Download collection as ZIP](https://docs.praxis-ai.com/api-reference/collections/download-collection-as-zip.md) - [Download selected files as ZIP](https://docs.praxis-ai.com/api-reference/collections/download-selected-files-as-zip.md): Streams a ZIP archive of the selected files. When only one file is selected, streams the file directly without zipping. A 1GB total size limit is enforced. Accepts both upload IDs and collection IDs — files in collections are included. Duplicate files are deduplicated by ID. ZIP entry names are dedu… - [Get all file and collection IDs for bulk select-all](https://docs.praxis-ai.com/api-reference/collections/get-all-file-and-collection-ids-for-bulk-select-all.md): Returns all file IDs and collection IDs matching the current scope (vault root or inside a collection), honoring the active filters from the UI (file-name search, status filter). When any filter is active, collections are NOT returned — selecting a whole collection would pull in non-matching files i… - [Get recursive file counts for collections](https://docs.praxis-ai.com/api-reference/collections/get-recursive-file-counts-for-collections.md): Given an array of collection IDs, returns the real recursive file count for each (including files in all descendant sub-collections). Does not use cached fileCount. - [List collections for a vault](https://docs.praxis-ai.com/api-reference/collections/list-collections-for-a-vault.md) - [List files within a collection](https://docs.praxis-ai.com/api-reference/collections/list-files-within-a-collection.md) - [Remove files from a collection](https://docs.praxis-ai.com/api-reference/collections/remove-files-from-a-collection.md) - [Update collection (rename, move vault)](https://docs.praxis-ai.com/api-reference/collections/update-collection-rename-move-vault.md) - [Send a message to the AI assistant](https://docs.praxis-ai.com/api-reference/conversation/send-a-message-to-the-ai-assistant.md): Processes conversational AI requests with full context awareness including: - User location and timezone - Conversation history (via selectedCourse) - Assistant personality and instructions - RAG (Retrieval-Augmented Generation) from uploaded documents - [Send a message to the AI assistant (experimental — Soul Document prompt)](https://docs.praxis-ai.com/api-reference/conversation/send-a-message-to-the-ai-assistant-experimental-—-soul-document-prompt.md): Experimental variant of `/api/ai/personal/qanda`. Identical request / response contract and Socket.IO streaming semantics, but the system prompt is generated by the **Soul Document V1** prompt generator (`getSoulDocumentPrompt` / `getSoulDocumentPromptBypassed`) instead of the production fragmented-… - [Send a message to the AI assistant (experimental — Soul Document V2 prompt)](https://docs.praxis-ai.com/api-reference/conversation/send-a-message-to-the-ai-assistant-experimental-—-soul-document-v2-prompt.md): Second-generation experimental variant of `/api/ai/personal/qanda`. Identical request / response contract to the V1 experimental endpoint, but uses the **Soul Document V2** prompt generator (`getSoulDocumentPromptV2` / `getSoulDocumentPromptV2Bypassed`) which refines the cohesive-anchor architecture… - [Send a message with HTTP SSE streaming response](https://docs.praxis-ai.com/api-reference/conversation/send-a-message-with-http-sse-streaming-response.md): Alternative to Socket.IO streaming - uses standard HTTP Server-Sent Events (SSE). Ideal for server-side integrations, SDKs, and environments where WebSockets aren't available. - [Get user feedbacks](https://docs.praxis-ai.com/api-reference/feedback/get-user-feedbacks.md): Retrieves feedback submitted by the current user. Returns up to 100 items sorted by newest first. Response is a raw JSON array (no wrapper object). - [Submit feedback](https://docs.praxis-ai.com/api-reference/feedback/submit-feedback.md): Submits user feedback about the application. Sends a notification email upon successful creation. - [Clear history records (soft delete)](https://docs.praxis-ai.com/api-reference/history/clear-history-records-soft-delete.md): Soft-deletes history records by setting forgotten=true. Two operation modes: (1) course_id deletes a conversation within the resolved institution scope and detaches its favorites, (2) id deletes a single record. Favorites in a course are detached (course_id/course_name removed) rather than deleted.… - [Generate an AI summary title for a history record or conversation](https://docs.praxis-ai.com/api-reference/history/generate-an-ai-summary-title-for-a-history-record-or-conversation.md): Uses AI to generate a concise title that describes the benefit or outcome of the conversation. The AI provider is determined by the institution's summaryModel configuration. When 'id' is supplied, reads a single history record (input, inputs, output, outputs, code) and returns up to 200 chars. When… - [Rename a conversation or favorite](https://docs.praxis-ai.com/api-reference/history/rename-a-conversation-or-favorite.md): Two modes of operation: (1) Rename a conversation by providing course_id and course_name - updates all history records in that conversation within the resolved institution scope. (2) Rename a favorite by providing id and favorite_name - updates a single record. If favorite_name is falsy, the field i… - [Retrieve user conversation histories](https://docs.praxis-ai.com/api-reference/history/retrieve-user-conversation-histories.md): Fetches conversation history records based on specified filters. Results are sorted newest-first by the database, then reversed to oldest-first before returning. Long strings in inputs/outputs are trimmed to 200 chars. Tool responses are truncated to 80 chars unless tools=true. - [Retrieve user conversations](https://docs.praxis-ai.com/api-reference/history/retrieve-user-conversations.md): Gets a grouped list of all conversations (courses) for the authenticated user. Each course includes its history count, last dialogue date, and the most recently used assistant (so callers can restore conversation context on the next turn). Courses with course_id=0 are filtered out of results. Instit… - [Retrieve user's favorite dialogues](https://docs.praxis-ai.com/api-reference/history/retrieve-users-favorite-dialogues.md): Returns history records marked as favorites by the authenticated user. Uses the same HistoryRecord response shape as /histories. Results are trimmed (inputs/outputs to 200 chars, tool responses to 80 chars). Limited to 1000 records. - [Update a history record](https://docs.praxis-ai.com/api-reference/history/update-a-history-record.md): Updates a user's history record with the provided properties. Accepts any valid history field in the body, not just favorite and forgotten. Returns the full updated document. - [Create a new institution (Digital Twin) for a specific context URL](https://docs.praxis-ai.com/api-reference/institutions/create-a-new-institution-digital-twin-for-a-specific-context-url.md): Creates a new institution record with the provided configuration and context information - [Fetch lazy-loaded institution about markdown](https://docs.praxis-ai.com/api-reference/institutions/fetch-lazy-loaded-institution-about-markdown.md): Returns the `about` markdown for a single institution, gated by an active UserInstitution membership for the caller. Used by the Gallery card flip and About modal so the bulk entitlements payload (POST /api/user/refresh/entitlements) does not have to ship the about text for every institution the use… - [Get institutions for LTI context](https://docs.praxis-ai.com/api-reference/institutions/get-institutions-for-lti-context.md): Retrieves institutions associated with a specific LTI context ID - [Update institution settings](https://docs.praxis-ai.com/api-reference/institutions/update-institution-settings.md): Updates the current user's institution configuration. No admin privilege check is enforced -- any authenticated user with an active institution can call this endpoint. The request body is validated against the institution authorized properties list (conversationModel, maxCompletionTokens, reasoningE… - [Aggregate vault-wide health stats](https://docs.praxis-ai.com/api-reference/ip-vault/aggregate-vault-wide-health-stats.md): Returns per-category counts across the entire vault (Personal / Instance / Account) — not scoped to the current collection or page. Used by the Files panel's Vault Health header to compute the A-F grade and the attention dot. Computed via parallel `$match + $count` pipelines (DocumentDB-safe; no `$f… - [Delete uploaded file](https://docs.praxis-ai.com/api-reference/ip-vault/delete-uploaded-file.md): Deletes a file and its associated embeddings from the user's IP Vault via RAG - [Re-ingest file from source URL](https://docs.praxis-ai.com/api-reference/ip-vault/re-ingest-file-from-source-url.md): Re-downloads the file content from its original `source_url`, replaces the file on disk, and re-runs the RAG ingestion pipeline — regenerating embeddings, summary, and metadata. The existing Upload record is updated in-place (no new record is created). - [Re-queue an existing file for ingestion](https://docs.praxis-ai.com/api-reference/ip-vault/re-queue-an-existing-file-for-ingestion.md): Re-enqueues an existing Upload record through the asynchronous ingestion pipeline (extract → chunk → sanitize → embed → finalize) without re-downloading the source file. Unlike `/reingest/{fileId}` which re-fetches the source URL, this endpoint operates on the file already on disk. - [Reload file content](https://docs.praxis-ai.com/api-reference/ip-vault/reload-file-content.md): Re-processes an existing file through the RAG pipeline, regenerating its embeddings and metadata. On success, returns the refreshed Upload record. On RAG callback error, returns HTTP 200 with success: false. - [Scan vault uploads for content quality](https://docs.praxis-ai.com/api-reference/ip-vault/scan-vault-uploads-for-content-quality.md): Analyzes embedding chunks for unoptimized content (JavaScript, HTML, CSS, SQL, JSON) and assigns a vaultHealthScore (0-100) to each unscanned upload. Only processes uploads with vaultHealthScore null. Idempotent - re-running skips already-scanned files. - [Search and retrieve user uploaded files](https://docs.praxis-ai.com/api-reference/ip-vault/search-and-retrieve-user-uploaded-files.md): Retrieves a paginated list of user uploads with optional filtering by filename, status, vault type, and institution. Supports compact and lean response modes. When no vault is specified, legacy behavior applies: the user's personal files plus institution files are returned, and account-shared upload… - [Update an existing upload file's metadata](https://docs.praxis-ai.com/api-reference/ip-vault/update-an-existing-upload-files-metadata.md): Updates the metadata of an uploaded file. Only whitelisted fields are accepted (originalname, file_title, file_summary, file_authors, file_url, source_url, status, is_private, is_public, institution, account_shared, collection, embeddings_model, summary_model, image_analysis_model, audio_analysis_mo… - [Update file confidential status](https://docs.praxis-ai.com/api-reference/ip-vault/update-file-confidential-status.md): Updates the confidential (is_private) flag on a file. The caller must either own the file or be an institution admin for the file's institution. - [Upload content from URL](https://docs.praxis-ai.com/api-reference/ip-vault/upload-content-from-url.md): Downloads or scrapes content from a URL and ingests it into the user's IP Vault via RAG. Google document URLs (Docs, Sheets, Slides) are automatically detected and read via Google OAuth instead of plain HTTP download. The URL is validated against SSRF in non-dev mode. When an institution is provided… - [Upload files](https://docs.praxis-ai.com/api-reference/ip-vault/upload-files.md): Uploads one or more files to the user's IP Vault for RAG processing and embedding. Files are uploaded via multipart form-data using the 'files' field name. Audio files (mp3, m4a, webm, wav, mp4, mov, etc.) are limited to 25MB each. Non-audio files are limited to 150MB each. The multer middleware enf… - [Approve a pending membership](https://docs.praxis-ai.com/api-reference/membership/approve-a-pending-membership.md): Approves a pending user institution membership. The caller must be the referrer (req.body.ref must match the authenticated user). On approval, the membership status is set to active and an approval email is sent to the user. - [Create or retrieve institution join code](https://docs.praxis-ai.com/api-reference/membership/create-or-retrieve-institution-join-code.md): Generates a new join code (UUID v4) for the specified institution, or returns the existing one if already set. Requires admin or super privileges. - [Create personal institution](https://docs.praxis-ai.com/api-reference/membership/create-personal-institution.md): Creates a new personal Digital Twin instance (UserInstitution with no institution) for the user. Does not return the created record. - [Email an invite link to a recipient](https://docs.praxis-ai.com/api-reference/membership/email-an-invite-link-to-a-recipient.md): Composes an invitation email containing the institution's join link and sends it to the supplied email address. Requires admin or super privileges. Reuses the institution's existing joinId or generates one on demand. - [Get available institutions](https://docs.praxis-ai.com/api-reference/membership/get-available-institutions.md): Retrieves a list of institutions the user can join. Results are wrapped in a UserInstitution-like structure with nested institution_data and account_data. Visibility rules depend on user account type and allowJoining/account settings. Optionally filters by a search term (matched against name, ainame… - [Get institution by join code](https://docs.praxis-ai.com/api-reference/membership/get-institution-by-join-code.md): Retrieves institution information using a join code. Includes populated account data if available. - [Join an institution](https://docs.praxis-ai.com/api-reference/membership/join-an-institution.md): Joins the user to an institution. If the user is not the referrer, membership requires approval and an email is sent to the referrer. If the user already has a membership for the institution, the existing record is returned. Credit awards may be issued on join if configured. - [Remove user institution membership](https://docs.praxis-ai.com/api-reference/membership/remove-user-institution-membership.md): Removes a user's membership from an institution. If removing the currently active profile, the user is automatically switched to another available membership. - [Bulk hard-delete shared rows for an instance (requires institutions.edit).](https://docs.praxis-ai.com/api-reference/memory/bulk-hard-delete-shared-rows-for-an-instance-requires-institutionsedit.md) - [Bulk hard-delete the user's own personal memory rows (filter-aware).](https://docs.praxis-ai.com/api-reference/memory/bulk-hard-delete-the-users-own-personal-memory-rows-filter-aware.md) - [Edit a memory parameter (whitelisted fields only).](https://docs.praxis-ai.com/api-reference/memory/edit-a-memory-parameter-whitelisted-fields-only.md): Whitelist: key_value, key_description, shared. Author can always edit own rows; non-author can edit shared rows iff super or holds institutions.edit on that institution. - [Hard-delete a single memory parameter.](https://docs.praxis-ai.com/api-reference/memory/hard-delete-a-single-memory-parameter.md) - [List the user's memory parameters (personal + shared in their instances).](https://docs.praxis-ai.com/api-reference/memory/list-the-users-memory-parameters-personal-+-shared-in-their-instances.md) - [Personal-scope data counts](https://docs.praxis-ai.com/api-reference/my-data/personal-scope-data-counts.md): Returns counts of personal-scope dialogues, uploads (with byte sum), and memory entries. Used by the My Data panel's initial render and by the post-delete refresh. Hits existing indexes — no `$facet` (DocumentDB-safe). - [Request a ZIP-by-email export of personal data](https://docs.praxis-ai.com/api-reference/my-data/request-a-zip-by-email-export-of-personal-data.md): Rate-limited to 1 request per user per hour. Returns 202 immediately and kicks off a background build that streams the ZIP to `/uploads//gdpr-export-.zip` and emails a 30-day-signed download link to the user's address. Contents: README.txt + dialogues.csv + uploads.csv + memory.csv + ass… - [Scoped soft-delete of personal data](https://docs.praxis-ai.com/api-reference/my-data/scoped-soft-delete-of-personal-data.md): Atomic per-class soft-delete. At least one of `dialogues` / `vault` must be true. Personal-scope only — institution rows are filtered out before any mutation. Idempotent: re-running returns zeros once everything is already soft-deleted. Vault deletes go through `rag.fileDelete` to clear embeddings +… - [Complete the Canvas LMS API authorization handoff](https://docs.praxis-ai.com/api-reference/oauth/complete-the-canvas-lms-api-authorization-handoff.md): Canvas redirects the user's browser here after they authorize Pria to call the Canvas API on their behalf (Canvas OAuth2 authorization-code flow). The handler exchanges the supplied `code` for a Canvas API access token, stores it on the caller's `UserInstitution.canvasApiToken`, writes a history ent… - [GitHub Marketplace webhook receiver](https://docs.praxis-ai.com/api-reference/oauth/github-marketplace-webhook-receiver.md): Receives `marketplace_purchase` events from GitHub when an org or user purchases, upgrades, downgrades, or cancels the Pria Marketplace listing. The endpoint validates the request via the `X-Hub-Signature-256` HMAC header (computed by GitHub with `GITHUB_WEBHOOK_SECRET`), then dispatches by `action`… - [Google Services OAuth callback](https://docs.praxis-ai.com/api-reference/oauth/google-services-oauth-callback.md): Google redirects here after the user accepts (or rejects) the consent screen. Validates the CSRF `state` against `req.session.oauth_state`, exchanges the authorization `code` for tokens, then stores them on `UserInstitution.googleLoginToken` or `User.googleLoginToken` depending on the institution co… - [Initiate SSO login](https://docs.praxis-ai.com/api-reference/oauth/initiate-sso-login.md): Initiates OAuth 2.0 SSO login for a specific provider - [Revoke an institution's stored Google token](https://docs.praxis-ai.com/api-reference/oauth/revoke-an-institutions-stored-google-token.md): Clears `cloudServices.google` from the target institution (`$unset`), and best-effort revokes the access token at Google. The caller must hold `institutions.edit`. As with the per-user revoke, an upstream revoke failure does not prevent the local cleanup or change the 200 response. - [Revoke the caller's stored Google Services token](https://docs.praxis-ai.com/api-reference/oauth/revoke-the-callers-stored-google-services-token.md): Clears the caller's stored Google OAuth token from the database — institution-specific (`UserInstitution.googleLoginToken`) when the JWT has institution context, otherwise personal (`User.googleLoginToken`). Best-effort: also calls Google's `https://oauth2.googleapis.com/revoke` to invalidate the to… - [SSO callback](https://docs.praxis-ai.com/api-reference/oauth/sso-callback.md): Handles the callback from OAuth 2.0 SSO authentication - [Start the Google OAuth flow for an institution-level token](https://docs.praxis-ai.com/api-reference/oauth/start-the-google-oauth-flow-for-an-institution-level-token.md): Begins an institution-scoped Google OAuth 2.0 authorization-code flow. The resulting token is later stored on `Institution.cloudServices.google.googleLoginToken` and is used as the **shared** institution credential for downstream Google API calls performed on behalf of any member of that institution… - [Start the Google Services (per-user) OAuth consent flow](https://docs.praxis-ai.com/api-reference/oauth/start-the-google-services-per-user-oauth-consent-flow.md): Begins a Google OAuth 2.0 authorization-code flow scoped to the per-user services the caller requests (Gmail / Drive / Calendar / Sheets / Docs). Generates a CSRF state, stores it in `req.session.oauth_state` along with the caller's `userId` and institution context, then 302-redirects to Google's co… - [Validate an institution's stored Google token](https://docs.praxis-ai.com/api-reference/oauth/validate-an-institutions-stored-google-token.md): Probes Google's userinfo endpoint with the institution's stored `cloudServices.google.googleLoginToken` to check whether it is still accepted. If Google rejects the token, the entire `cloudServices.google` subtree is cleared (`$unset`) and the response reports `valid: false, cleared: true`. The call… - [Validate the caller's stored Google Services token](https://docs.praxis-ai.com/api-reference/oauth/validate-the-callers-stored-google-services-token.md): Checks whether the caller's stored Google access token is still accepted by Google by making a probing call to the userinfo endpoint. Resolves which storage location to read from in the same priority order as the runtime authenticator: institution token first (when the JWT has an institution), perso… - [Create a new embedding chunk](https://docs.praxis-ai.com/api-reference/rag/create-a-new-embedding-chunk.md): Creates a new embedding chunk for an existing upload. The chunk text is vectorized automatically using the institution's configured embedding model. The new chunk is appended after the last existing chunk (highest chunkIndex + 1). - [Delete an embedding chunk](https://docs.praxis-ai.com/api-reference/rag/delete-an-embedding-chunk.md): Permanently deletes a single embedding chunk by ID. - [Get embedding chunks for an upload](https://docs.praxis-ai.com/api-reference/rag/get-embedding-chunks-for-an-upload.md): Retrieves all embedding chunks for a specific IP Vault upload, sorted by chunk index. Each uploaded file is split into text chunks and converted into vector embeddings for retrieval-augmented generation (RAG). This endpoint returns the chunk metadata and text content (up to 1000 chunks per request). - [Sanitize an embedding chunk with AI](https://docs.praxis-ai.com/api-reference/rag/sanitize-an-embedding-chunk-with-ai.md): Sends the chunk text to the institution's summary model for AI-powered cleanup. Removes noise (navigation, boilerplate, encoding artifacts), normalizes whitespace, and fixes broken formatting — without summarizing or shortening the content. - [Search RAG content for user using a specified query string](https://docs.praxis-ai.com/api-reference/rag/search-rag-content-for-user-using-a-specified-query-string.md) - [Update an embedding chunk](https://docs.praxis-ai.com/api-reference/rag/update-an-embedding-chunk.md): Updates an existing embedding chunk. When `chunkText` is modified, the vector embedding is automatically regenerated to keep the semantic search index in sync with the text content. - [Create realtime AI session](https://docs.praxis-ai.com/api-reference/realtime/create-realtime-ai-session.md): Creates a new realtime AI session for voice/WebRTC communication. Provider, model, and voice are resolved server-side from the user's institution `rtModel` setting (OpenAI / Google Gemini Live / xAI / ElevenLabs / LemonSlice). Returns either an ephemeral WebRTC key (OpenAI / Gemini / xAI), a signed-… - [Execute realtime tool](https://docs.praxis-ai.com/api-reference/realtime/execute-realtime-tool.md): Executes a tool/function during a realtime AI session. Used for RAG search, web search, and other AI tool capabilities. - [Mint a Deepgram streaming STT session](https://docs.praxis-ai.com/api-reference/realtime/mint-a-deepgram-streaming-stt-session.md): Mints a short-lived Deepgram bearer token (`/v1/auth/grant`) plus the WSS URL the browser should open. The long-lived account API key never leaves the backend — the browser passes `access_token` via the WS subprotocol and streams 16 kHz mono linear16 PCM directly to Deepgram. - [Save realtime conversation](https://docs.praxis-ai.com/api-reference/realtime/save-realtime-conversation.md): Saves a realtime conversation to history after the session ends. Records inputs, outputs, tool usage, and token consumption. - [Stream a LemonSlice avatar voice turn](https://docs.praxis-ai.com/api-reference/realtime/stream-a-lemonslice-avatar-voice-turn.md): Drives a single LLM turn for the LemonSlice Hosted Pipeline avatar. The backend resolves the user's institution context (assistant, RAG files, conversation history, memory, tools) and streams the LLM response back as NDJSON — one JSON object per line: - [Sign SDK launch parameters](https://docs.praxis-ai.com/api-reference/sdk-launch/sign-sdk-launch-parameters.md): Signs launch parameters with a server-held HMAC-SHA256 secret for secure SDK iframe embedding. Called by `pria-sdk.js` before creating the launch iframe. - [Verify SDK launch token](https://docs.praxis-ai.com/api-reference/sdk-launch/verify-sdk-launch-token.md): Verifies an HMAC-SHA256 launch token against the server-held secret. Called by `Sdk.js` (React frontend) before proceeding to autosignup. - [Create a new instance variable](https://docs.praxis-ai.com/api-reference/setting/create-a-new-instance-variable.md): Creates a new setting within the authenticated user's institution. The institution and user fields are auto-populated from the auth context. A duplicate key within the same institution returns a 400 error. - [Delete an instance variable](https://docs.praxis-ai.com/api-reference/setting/delete-an-instance-variable.md): Permanently removes a setting by ID. The delete is scoped to the authenticated user's institution. Validates the ID format and checks that the setting exists before attempting deletion. - [Retrieve settings by key](https://docs.praxis-ai.com/api-reference/setting/retrieve-settings-by-key.md): Fetches settings matching a specific key. When no institution is provided, returns settings where institution is null. Results are sorted by key descending and limited to 100 records. - [Retrieve settings for the current institution](https://docs.praxis-ai.com/api-reference/setting/retrieve-settings-for-the-current-institution.md): Fetches settings scoped to the authenticated user's institution, with institution and user metadata. Results are sorted by key ascending and limited to 100 records. Requires the user to belong to an institution. - [Update an instance variable](https://docs.praxis-ai.com/api-reference/setting/update-an-instance-variable.md): Updates an existing setting by ID. Accepts any non-empty object as the request body; no specific fields are required. No institution ownership check is performed. - [Check status of the middleware application](https://docs.praxis-ai.com/api-reference/testing/check-status-of-the-middleware-application.md): Returns the current health status of the service including uptime, memory usage, and dependency status - [Retrieves an institution and validates user access for a specific context](https://docs.praxis-ai.com/api-reference/testing/retrieves-an-institution-and-validates-user-access-for-a-specific-context.md): Use this method to determine if your originating URL or institution ID is associated with an institution, and optionally validate user access status. The properties returned can be used for branding your AI application. - [Get available tools for the authenticated user](https://docs.praxis-ai.com/api-reference/tools/get-available-tools-for-the-authenticated-user.md): Retrieves the list of active tools available for the current user. Returns minimal tool information needed for Pria requests, including availability status for Google-integrated tools based on the user's institution settings and Google Cloud configuration. - [Transient speech-to-text](https://docs.praxis-ai.com/api-reference/transcription/transient-speech-to-text.md): Accepts a single audio blob, dispatches it to the user's institution- configured STT provider via `getProviderForModel(user, 'audioAnalysisModel')`, and returns the transcript. Suitable for in-place dictation (e.g. the chat textarea mic icon) — explicitly does NOT persist `Upload`, `History`, or emb… - [Lazy-fetch the bulk thinking/reasoning array for a single History record](https://docs.praxis-ai.com/api-reference/user-history/lazy-fetch-the-bulk-thinkingreasoning-array-for-a-single-history-record.md): List endpoints (`/api/user/histories`, `/api/user/favorites`) project out the bulk `thinking` text and expose only a `hasThinking` boolean for the UI badge. This endpoint returns the full thinking array on demand, fired by the UI when the user expands the lightbulb `
` block. - [Credit user institution with tokens](https://docs.praxis-ai.com/api-reference/user-institutions/credit-user-institution-with-tokens.md): Transfers credits from the parent account to the institution. Requires admin or super account type. Validates that the user institution exists, belongs to the authenticated user, matches the user's current institution, the institution is linked to a parent account, and the account has sufficient cre… - [Switch user's active institution profile](https://docs.praxis-ai.com/api-reference/user-institutions/switch-users-active-institution-profile.md): Switches the user's active institution profile. Updates the user's institution reference and plan (sdk for institution, free for personal). Also updates lastLogin and lastKA on the target user-institution record. - [Unlink LTI context from user institution](https://docs.praxis-ai.com/api-reference/user-institutions/unlink-lti-context-from-user-institution.md): Removes the LTI context association from a user institution, allowing reassociation with a different Digital Twin. Validates that the user institution exists, belongs to the authenticated user, has an LTI context linked, belongs to an institution, and the institution record exists. Also removes the… - [Update user institution preferences](https://docs.praxis-ai.com/api-reference/user-institutions/update-user-institution-preferences.md): Updates user-institution settings. Accepts canvasApiToken (object to set, empty string to remove), lastConversation, favoriteAssistants, acceptedAccountPrivacyPolicyDate, and favorite. At least one valid field must be provided. - [Dismiss the "enable MFA" nudge for 7 days](https://docs.praxis-ai.com/api-reference/user-profile/dismiss-the-"enable-mfa"-nudge-for-7-days.md): Records `mfaPromptDismissedAt = now` on the current user. The post- login MFA opt-in screen will suppress itself for 7 days from this timestamp before reappearing. - [Forget a device row from the caller's list (cosmetic only)](https://docs.praxis-ai.com/api-reference/user-profile/forget-a-device-row-from-the-callers-list-cosmetic-only.md): Deletes one of the caller's own apiKeyUsage rows so it disappears from their list. This does NOT invalidate access — anyone who still holds the API key can sign in again and a new row will be recorded. To actually revoke access, rotate the key via POST /api/user/api-key (which wipes ALL device rows… - [List devices that have used the caller's personal API key](https://docs.praxis-ai.com/api-reference/user-profile/list-devices-that-have-used-the-callers-personal-api-key.md): Returns the caller's own per-device usage rows for their personal API key, ordered by most-recently-seen, capped at 50. Each successful POST /api/auth/api-key-signin upserts a row keyed by sha256(ipSubnet24 | uaFamily | uaOs). Rotating or revoking the key wipes all rows (the list resets to empty). R… - [List the current user's active MFA-trusted devices](https://docs.praxis-ai.com/api-reference/user-profile/list-the-current-users-active-mfa-trusted-devices.md): Returns every non-revoked, non-expired `trusted_device` row for the authenticated user, sorted by `lastUsedAt` descending. These rows back the 7-day MFA-skip cookie — revoking one forces the matching browser to re-MFA on its next login. - [Revoke a specific trusted device](https://docs.praxis-ai.com/api-reference/user-profile/revoke-a-specific-trusted-device.md): Targets a single trusted-device row by its `deviceId` (the opaque hex value). - [Revoke ALL trusted devices for the current user](https://docs.praxis-ai.com/api-reference/user-profile/revoke-all-trusted-devices-for-the-current-user.md): Sets `revokedAt` on every active trusted-device row for the user. Also clears the pria_mfa_trust cookie from this browser. Users will see re-MFA on their next login on every device. - [Send a verification code to prove email ownership (post-enable enrollment)](https://docs.praxis-ai.com/api-reference/user-profile/send-a-verification-code-to-prove-email-ownership-post-enable-enrollment.md): Called by the client right after PUT /api/user/me {mfaEnabled:true}. Creates a 5-min challenge, emails the 6-digit code, returns challengeId + maskedEmail so the frontend can launch the verify screen. On success the user gets a trusted-device cookie; on cancel the frontend rolls mfaEnabled back to f… - [Get custom AI models](https://docs.praxis-ai.com/api-reference/user/get-custom-ai-models.md): Retrieves the list of custom AI models available for the current institution - [Get system AI models](https://docs.praxis-ai.com/api-reference/user/get-system-ai-models.md): Retrieves the list of system-wide AI models available - [Refresh user entitlements and permissions](https://docs.praxis-ai.com/api-reference/user/refresh-user-entitlements-and-permissions.md): Retrieves the current user's entitlements across all institutions. Transforms populated institution/account into institution_data/account_data. Sorts by favorite flag, ainame, and institution name. Auto-cleans null-institution duplicate records. Returns accountManagerAccounts. - [Refresh user profile data](https://docs.praxis-ai.com/api-reference/user/refresh-user-profile-data.md): Retrieves the current user's full profile including populated institution, account, and Google OAuth status. Proactively refreshes expired Google tokens when a refresh_token is available. Returns a fresh JWT token (sliding session) — store this token to extend the session without re-authentication. - [Update user profile or change password](https://docs.praxis-ai.com/api-reference/user/update-user-profile-or-change-password.md): Updates the current user's profile fields or changes the user's password. When `resetCodeId` is present in the request body, the endpoint operates in password-change mode and requires `password` (current) and `newPassword` fields. Otherwise, it updates profile fields validated against the authorized… - [Upload profile picture](https://docs.praxis-ai.com/api-reference/user/upload-profile-picture.md): Uploads a profile picture from base64-encoded image data. Saves the file to the user's home directory, creates a RAG upload record for the file, and updates the user's profile picture URL. Supported formats are png, jpeg, jpg, gif, and webp. Maximum file size is 5MB. - [Managing Accounts](https://docs.praxis-ai.com/mdx/admin-guide/accounts/managing-accounts.md): Configure account settings, shared integrations, instance associations, and credit transfers. - [Accounts](https://docs.praxis-ai.com/mdx/admin-guide/accounts/overview.md): Centralize management of multiple Digital Twin instances, monitor credits, and streamline deployment across your organization. - [AI Models](https://docs.praxis-ai.com/mdx/admin-guide/ai-models.md): Configure which AI models power your Digital Twin — platform defaults, custom BYOM endpoints, and reasoning effort settings. - [Assistants](https://docs.praxis-ai.com/mdx/admin-guide/assistants.md): Create, manage, and share AI assistants that extend your Digital Twin's capabilities with specialized knowledge and workflows. - [Configuration and Integrations](https://docs.praxis-ai.com/mdx/admin-guide/configuration.md): Learn how to manage instances effectively. - [Connector MCP](https://docs.praxis-ai.com/mdx/admin-guide/connectors.md): Connect your Digital Twin to remote MCP servers for unlimited AI capabilities. - [Crafting Digital Twin Instructions](https://docs.praxis-ai.com/mdx/admin-guide/digital-twin-instructions.md): A methodology guide for writing effective system instructions that shape your Digital Twin's personality, expertise, and behavior. - [Entitlements](https://docs.praxis-ai.com/mdx/admin-guide/entitlements.md): Manage fine-grained, role-based permissions for admin users across your institution. - [Feedback](https://docs.praxis-ai.com/mdx/admin-guide/feedback.md): Learn how to manage feedback effectively. - [Histories](https://docs.praxis-ai.com/mdx/admin-guide/histories.md): Learn how to manage histories effectively. - [Admin Guide](https://docs.praxis-ai.com/mdx/admin-guide/introduction.md): Configure and manage your Digital Twin instances, users, AI models, tools, and organization-wide settings. - [Multi-Factor Authentication (MFA)](https://docs.praxis-ai.com/mdx/admin-guide/mfa.md): Pria supports opt-in email-based two-step verification. This page covers how MFA works, how to manage it for users in your instance, the operational env-var requirements, and the audit trail. - [Onboarding Questions](https://docs.praxis-ai.com/mdx/admin-guide/onboarding-questions.md): The onboarding questions are designed to help you personalize your digital twin. These questions will guide the AI in understanding your preferences, communication style, and how you would respond in various situations. This personalization is key to creating a more authentic and effective digital a… - [Personalization](https://docs.praxis-ai.com/mdx/admin-guide/personalization.md): Configure your Digital Twin's identity, appearance, behavior, and AI model assignments in the Personalization and AI Models tab. - [Sessions](https://docs.praxis-ai.com/mdx/admin-guide/sessions.md): Track user activity and monitor real-time connections for FERPA compliance and system visibility. - [SSO Providers](https://docs.praxis-ai.com/mdx/admin-guide/sso-providers.md): Configure OAuth 2.0 Single Sign-On providers for automatic user authentication and enrollment. - [Tools Reference](https://docs.praxis-ai.com/mdx/admin-guide/tools.md): Complete reference for AI tools available in your Digital Twin. - [UI Customization](https://docs.praxis-ai.com/mdx/admin-guide/ui-customization.md): Learn how to customize the user interface of your instance using CSS classes. - [Users](https://docs.praxis-ai.com/mdx/admin-guide/users.md): This comprehensive guide covers all aspects of user management, from basic operations to advanced bulk actions. - [Assistant Variables](https://docs.praxis-ai.com/mdx/admin-guide/variables.md): Use substitution variables to externalize sensitive data and create reusable assistant configurations. - [Introduction](https://docs.praxis-ai.com/mdx/api-reference/introduction.md): Welcome to the Praxis AI API reference documentation. This section provides detailed information about the Praxis AI API endpoints, request formats, and response structures to help you integrate Praxis AI's capabilities directly into your applications. - [What's new?](https://docs.praxis-ai.com/mdx/changelog.md): Product updates and announcements - [Contact Support](https://docs.praxis-ai.com/mdx/contact-support.md): Our customer support team is available to help you get the most of Praxis AI - [LTI v1.3](https://docs.praxis-ai.com/mdx/integrations/canvas/lti-1-3.md): Integrate Praxis AI into your Canvas instance as an LTI Tool. - [Overview](https://docs.praxis-ai.com/mdx/integrations/canvas/overview.md): Canvas Integration features - [Pria Tools](https://docs.praxis-ai.com/mdx/integrations/canvas/pria-tools.md): Control your Canvas instance through the Canvas REST APIs - [Custom Theme](https://docs.praxis-ai.com/mdx/integrations/canvas/theme.md): Integrate Praxis AI within Canvas LMS - [Theme Tools](https://docs.praxis-ai.com/mdx/integrations/canvas/theme-tools.md): Theme Tools is a Nice Add-On to the Canvas Theme install — it layers editor widgets and on-page interactions on top of the embedded Pria SDK so Pria feels native to Canvas. - [Chat Completions API](https://docs.praxis-ai.com/mdx/integrations/chat-completions/introduction.md): Connect to any Digital Twin using the OpenAI SDK — minimal setup, full compatibility - [D2L Brightspace](https://docs.praxis-ai.com/mdx/integrations/d2l/introduction.md): Integrate Praxis AI with D2L Brightspace using LTI Advantage - [ElevenLabs Voice Agent](https://docs.praxis-ai.com/mdx/integrations/elevenlabs/introduction.md): Give your Digital Twin a voice — connect an ElevenLabs agent to Pria using Custom LLM and deploy embeddable voice widgets - [Gemini Live Voice](https://docs.praxis-ai.com/mdx/integrations/gemini-live/introduction.md): Enable real-time voice conversations powered by Google Gemini's native audio WebSocket API. - [Google Workspace](https://docs.praxis-ai.com/mdx/integrations/google-workspace/overview.md): Connect Google Workspace services to your Digital Twin for email, files, calendar, and more. - [MCP Server](https://docs.praxis-ai.com/mdx/integrations/mcp/introduction.md): Connect your LLM to Praxis AI Middleware's MCP Server - [Overview](https://docs.praxis-ai.com/mdx/integrations/overview.md): Integrate your Digital Twins seamlessly in your LMS, web applications, or any LLM-powered environment - [Websites Examples](https://docs.praxis-ai.com/mdx/integrations/web/examples.md): Take a look at our partner sites featuring integration through the Web SDK. - [Embed your Digital Twin](https://docs.praxis-ai.com/mdx/integrations/web/introduction.md): Embed your Digital Twin in any Web application using the Web SDK. - [Digital Twin Loading Sequence](https://docs.praxis-ai.com/mdx/integrations/web/loading-sequence.md): Step-by-step guide to the SDK initialization lifecycle — from script injection to conversation start. - [Switch to Praxis-AI Middleware](https://docs.praxis-ai.com/mdx/introduction/byot.md): Unlock the full power of AI orchestration with enterprise-grade flexibility - [FAQ](https://docs.praxis-ai.com/mdx/introduction/faq.md): Frequently asked questions about Praxis AI - [Glossary](https://docs.praxis-ai.com/mdx/introduction/glossary.md): Key terms and definitions for the Praxis AI platform - [Plans and credits](https://docs.praxis-ai.com/mdx/introduction/plans-and-credits.md): Understanding plans, credit usage and credit rollovers in Praxis AI - [Praxis Studios](https://docs.praxis-ai.com/mdx/introduction/praxis-studios.md): Your Implementation Partner for AI Digital Twin Success - [Student Data Privacy](https://docs.praxis-ai.com/mdx/introduction/privacy-edu-consent.md): Student Data Privacy Consent Form - [WCAG Compliance](https://docs.praxis-ai.com/mdx/introduction/wcag-compliance.md): Web Content Accessibility Guidelines (WCAG) 2.0/2.1 Level A & AA Conformance. - [Welcome to Praxis AI](https://docs.praxis-ai.com/mdx/introduction/welcome.md): The AI middleware that turns any AI model into a personalized Digital Twin — with your voice, your knowledge, and your tools. Deploy everywhere: LMS, web, mobile, voice, or API. - [Navigating the LXP](https://docs.praxis-ai.com/mdx/lxp/introduction.md): Welcome to the Praxis Learning Experience Platform! - [JavaScript](https://docs.praxis-ai.com/mdx/sdk/javascript.md): Use the Javascript SDK to interact with your Digital Twin programatically from any Web Application. - [Object Definitions](https://docs.praxis-ai.com/mdx/sdk/object-definitions.md): This document describes the object definitions used by the Praxis AI Javascript SDK. - [Assistant Library](https://docs.praxis-ai.com/mdx/user-guide/assistants-personalization/assistant-library.md): Browse ready-made assistants for education, development, and general use. - [What are Assistants](https://docs.praxis-ai.com/mdx/user-guide/assistants-personalization/assistants.md): Assistants are specialized AI tools that expand your digital twin's capabilities for specific tasks. - [Creating Assistants](https://docs.praxis-ai.com/mdx/user-guide/assistants-personalization/building.md): Advanced guide to building custom assistants using the CRISPE methodology - [Best Practices](https://docs.praxis-ai.com/mdx/user-guide/best-practices.md): A Comprehensive Guide to the Top 10 Best Practices - [Code & Development](https://docs.praxis-ai.com/mdx/user-guide/capabilities/code-development.md): Write, debug, optimize, and document code in virtually any programming language. Generate icons, design systems, and solve technical challenges. - [Content Creation](https://docs.praxis-ai.com/mdx/user-guide/capabilities/content-creation.md): Transform your ideas into reality across every domain. Generate academic papers, technical documentation, creative writing, and business content with professional-grade quality. - [Data & Charts](https://docs.praxis-ai.com/mdx/user-guide/capabilities/data-visualization.md): Analyze datasets, generate insights, and create interactive 2D charts to visualize your data. - [Media Analysis](https://docs.praxis-ai.com/mdx/user-guide/capabilities/media-analysis.md): Analyze images, extract text from photos, transcribe audio and video files, and work with YouTube content using AI vision and speech capabilities. - [Science & Research](https://docs.praxis-ai.com/mdx/user-guide/capabilities/science-research.md): Perform BLAST searches for bioinformatics, render scientific equations with KaTeX, and solve complex math and chemistry problems. - [Sharing Dialogues](https://docs.praxis-ai.com/mdx/user-guide/capabilities/sharing.md): Share conversations via secure links and enable collaboration with peers, whether or not they have a Pria account. - [Create Your Digital Twin](https://docs.praxis-ai.com/mdx/user-guide/create-digital-twin.md): A step-by-step guide to creating your own Digital Twin — from initial setup to personalization and deployment. - [Credits](https://docs.praxis-ai.com/mdx/user-guide/credits.md): Credits are the usage units that power your digital twin interactions. Think of them as tokens that get consumed each time you or your users engage with the digital twin services. - [Credit Optimization](https://docs.praxis-ai.com/mdx/user-guide/credits-optimization.md): Optimizing Credit Usage with Assistants - [Quick-start with your Digital Twin](https://docs.praxis-ai.com/mdx/user-guide/digital-twin-getting-started.md): Congratulations! Your custom digital twin has been created and is ready to transform how you work, learn, and interact with AI. This guide will help you get started quickly and make the most of your new AI companion. - [Audio Notes](https://docs.praxis-ai.com/mdx/user-guide/files-documents/audio-notes.md): Capture spoken notes directly from the Pria toolbar. Each recording is transcribed in the background and filed in your personal IP Vault, ready to be used through RAG when you converse with your digital twin. - [IP Vault](https://docs.praxis-ai.com/mdx/user-guide/files-documents/ipvault.md): Upload files to give your digital twin access to your own documents, research, and knowledge—so it can reference your content when answering questions. - [Managing Files](https://docs.praxis-ai.com/mdx/user-guide/files-documents/managing-files.md): Transform your digital twin into a personalized knowledge expert by uploading files to your secure IP Vault. Your digital twin can then reference this content to provide informed, contextual responses tailored to your organization and needs. - [Convo Mode](https://docs.praxis-ai.com/mdx/user-guide/interface/convo-speech.md): Convo mode transforms your digital twin interaction from traditional text-based Q&A into natural, flowing dialogue. It enables real-time voice conversations where you can speak naturally with your AI assistant, creating a more intuitive and engaging experience. - [The Gallery](https://docs.praxis-ai.com/mdx/user-guide/interface/digital-expert-gallery.md): Manage and switch between your digital experts effortlessly using the Gallery - [History and Settings](https://docs.praxis-ai.com/mdx/user-guide/interface/history-settings.md): Learn how to navigate your conversation history and manage your interactions with Praxis AI. - [Input and Responses](https://docs.praxis-ai.com/mdx/user-guide/interface/input-responses.md): Learn how to interact with your digital twin and manage your responses. - [Faculty Onboarding](https://docs.praxis-ai.com/mdx/user-guide/lms/faculty-onboarding.md): Learn how your new Praxis Digital Twin is used in your Learning Management System to deliver personalized, context-aware educational support. - [Access your LMS](https://docs.praxis-ai.com/mdx/user-guide/lms/user-auth.md): Learn how your digital twin seamlessly integrates with your Learning Management System to deliver personalized, context-aware educational support. - [Conversation History](https://docs.praxis-ai.com/mdx/user-guide/memory/conversation-history.md): Your digital twin's working memory for the current conversation - [Memory Systems](https://docs.praxis-ai.com/mdx/user-guide/memory/memory-systems.md): Your digital twin uses three complementary memory systems to provide both immediate context and long-term personalization - [Shared Memory](https://docs.praxis-ai.com/mdx/user-guide/memory/shared-memory.md): Information that your digital twin shares with all users in your organization—like a team knowledge base everyone can access. - [User Memory](https://docs.praxis-ai.com/mdx/user-guide/memory/user-memory.md): User Memory is your digital twin's permanent storage system that remembers important information about you across all conversations and sessions. The User Memory is used to creates a truly personalized experiences. - [Change Password](https://docs.praxis-ai.com/mdx/user-guide/profile-settings/change-password.md): Follow these steps to update your account password and maintain secure access to your digital twin. - [Edit Profile](https://docs.praxis-ai.com/mdx/user-guide/profile-settings/edit-profile.md): Your profile settings allow you to personalize and manage your profile settings in your digital twin. Access these settings to customize your display preferences and administrative options. - [Google Services](https://docs.praxis-ai.com/mdx/user-guide/profile-settings/google-services.md): Connect your Google account to enable Gmail, Drive, Calendar, and more within your Digital Twin conversations. - [Two-Step Verification (MFA)](https://docs.praxis-ai.com/mdx/user-guide/profile-settings/two-step-verification.md): Add an email-based second factor to your Pria account. After turning it on, signing in from a new browser or location requires a 6-digit code sent to your inbox. ## OpenAPI Specs - [runtime-api](https://docs.praxis-ai.com/api-reference/runtime-api.json) - [admin-api](https://docs.praxis-ai.com/api-reference/admin-api.json) ## Optional - [Innovations Hub](https://praxis-ai.com/innovation-hub/) - [Community Gitlab](https://gitlab.com/praxis-ai/pria-client-sdk)