Build a Kralis-branded Classroom client without bypassing event access, admission, attendance, or recording rules.
Kralis Classroom is available through authenticated GraphQL workflows. A custom client works with Kralis event IDs and permissions; it does not create public provider meeting links or require separate meeting accounts.
Render actions from the effective event role and current settings. A host or moderator may receive management actions; an ordinary participant does not. Always handle a rejected mutation because roles or live permissions can change after the screen was loaded.
Use documented Classroom GraphQL operations for application state. Do not invent a parallel chat, admission, or attendance system and expect it to appear in Kralis history.
Ordinary participants should see only recordings the API exposes to them. Managers can receive processing, failed, ready, published, and deleted states according to authorization. Never expose a playback URL beyond its intended user or assume it is permanent.
Whiteboards can exist without an event. A client may list boards available to the user and attach or open them through documented operations. Editing access and live-view behavior remain subject to current Kralis permissions.
Do not embed infrastructure credentials, construct realtime room names, or bypass Kralis admission with arbitrary meeting links. Always request access and room credentials through authenticated Kralis operations.
Use GraphiQL to inspect the current classroom queries, mutations, inputs, connection fields, and responses.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Kralis Docs","colors":{"primary":"#1447e6","light":"#3b82f6","dark":"#3b82f6"},"logo":{"light":"https://mintcdn.com/kralis/fznqxkdoX8eDtEbC/images/branding/logo-light.png?fit=max\u0026auto=format\u0026n=fznqxkdoX8eDtEbC\u0026q=85\u0026s=916bf70db65f407691b6cd0b129939cb","dark":"https://mintcdn.com/kralis/fznqxkdoX8eDtEbC/images/branding/logo-dark.png?fit=max\u0026auto=format\u0026n=fznqxkdoX8eDtEbC\u0026q=85\u0026s=9687973e1f7342dcd326c90c9a72939f","href":"/"},"favicon":"https://mintcdn.com/kralis/fznqxkdoX8eDtEbC/images/branding/favicon.png?fit=max\u0026auto=format\u0026n=fznqxkdoX8eDtEbC\u0026q=85\u0026s=5eb8b2c5940799e231a75bf042b3fcd7","navbar":{"primary":{"type":"button","label":"Get Started","href":"https://kralis.app"}},"footer":{"links":[{"header":"Product","items":[{"label":"Roles and Permissions","href":"/reference/roles-and-permissions"},{"label":"Students","href":"/students/overview"},{"label":"Results and SRMS","href":"/results/overview"},{"label":"Attendance","href":"/attendance/overview"}]},{"header":"Learning","items":[{"label":"CBT","href":"/cbt/overview"},{"label":"LMS","href":"/lms/overview"},{"label":"Classroom","href":"/classroom/overview"},{"label":"Fees","href":"/fees/overview"}]},{"header":"Developers","items":[{"label":"Developer Guide","href":"/developers/overview"},{"label":"Authentication","href":"/developers/authentication"},{"label":"School Scoping","href":"/developers/auth-and-scoping"},{"label":"API Reference","href":"/developers/reference-links"}]},{"header":"Support","items":[{"label":"Quickstart","href":"/quickstart"},{"label":"Onboarding","href":"/onboarding/school-onboarding"},{"label":"Get Help","href":"/getting-started/get-help"},{"label":"Changelog","href":"/changelogs"}]}]},"styling":{"latex":false},"navigation":{"global":{"tabs":[{"tab":"Docs","href":"/"},{"tab":"Roles","href":"/roles/overview"},{"tab":"Results","href":"/results/overview"},{"tab":"Developers","href":"/developers/overview"},{"tab":"Help","href":"/getting-started/get-help"},{"tab":"API","href":"/developers/reference-links"},{"tab":"Integrations","href":"/integrations/overview"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"kralis","hasAudioNarration":false,"actualSubdomain":"kralis","customDomains":["docs.kralis.app"],"gitSource":{"type":"github","owner":"netrobase","repo":"kralis-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6adf3fc0e705fd92bf168fb8","collectionId":"56d0f6c4-3e2f-4783-bd0e-e3bb5343f9ec","liveDeploymentHistoryId":"6adf3fc0e705fd92bf168fb8","schemaVersion":"v3"},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6adf3fc0e705fd92bf168fb8","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"Developers","count":13},{"language":"default","tag":"Classroom","count":10},{"language":"default","tag":"Results","count":8},{"language":"default","tag":"School Setup","count":7},{"language":"default","tag":"CBT","count":6},{"language":"default","tag":"Fees","count":6},{"language":"default","tag":"LMS","count":6},{"language":"default","tag":"Attendance","count":5},{"language":"default","tag":"Getting Started","count":5},{"language":"default","tag":"Students","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"developers/classroom-integration","slug":"/developers/classroom-integration","pageMetadata":{"title":"Classroom API Integration","description":"Build a Kralis-branded Classroom client without bypassing event access, admission, attendance, or recording rules.","sidebarTitle":"Classroom Integration","href":"/developers/classroom-integration"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Build a Kralis-branded Classroom client without bypassing event access, admission, attendance, or recording rules.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Heading,Mermaid,Table,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Kralis Classroom is available through authenticated GraphQL workflows. A custom client works with Kralis event IDs and permissions; it does not create public provider meeting links or require separate meeting accounts.`}),`\n`,_jsx(Heading,{level:`2`,id:`core-concepts`,children:`Core concepts`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Concept`}),_jsx(_components.th,{children:`Meaning for a client`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Classroom event`}),_jsx(_components.td,{children:`The planned or instant classroom with schedule, audience, and settings`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Classroom session`}),_jsx(_components.td,{children:`One live run of the event`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Participant`}),_jsx(_components.td,{children:`A Kralis user associated with the event and effective role`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Admission`}),_jsx(_components.td,{children:`Waiting-room state controlling entry`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Presence and attendance`}),_jsx(_components.td,{children:`Server-calculated evidence from actual room joins and leaves`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Recording`}),_jsx(_components.td,{children:`A session output with processing and publication state`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Whiteboard`}),_jsx(_components.td,{children:`An independently owned board optionally attached to an event`})]})]})]}),`\n`,_jsx(Mermaid,{chart:`stateDiagram-v2\n [*] --> DiscoverEvent\n DiscoverEvent --> RequestAdmission: Waiting room applies\n DiscoverEvent --> RequestJoin: Bypass or no waiting room\n RequestAdmission --> Waiting\n Waiting --> RequestJoin: Admitted\n Waiting --> Rejected: Rejected\n RequestJoin --> LiveRoom: Join credentials issued\n LiveRoom --> Review: Leave or event ends\n Review --> [*]`}),`\n`,_jsx(Heading,{level:`2`,id:`recommended-join-flow`,children:`Recommended join flow`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Query an event visible to the signed-in user.`}),`\n`,_jsx(_components.li,{children:`Display schedule, access state, media defaults, and recording notice.`}),`\n`,_jsx(_components.li,{children:`Request admission when the waiting room requires it.`}),`\n`,_jsx(_components.li,{children:`Observe admission state instead of repeatedly submitting requests.`}),`\n`,_jsx(_components.li,{children:`Acknowledge the recording notice when required.`}),`\n`,_jsx(_components.li,{children:`Request short-lived join credentials through Kralis GraphQL.`}),`\n`,_jsx(_components.li,{children:`Connect using only the returned room information and permissions.`}),`\n`,_jsx(_components.li,{children:`Return to Kralis event history after leaving.`}),`\n`]}),`\n`,_jsx(Mermaid,{chart:`sequenceDiagram\n participant C as Custom client\n participant K as Kralis API\n participant R as Realtime room\n C->>K: Query visible event\n C->>K: Request admission if required\n K-->>C: Pending, admitted, or rejected\n C->>K: Request join credentials\n K-->>C: Short-lived scoped credentials\n C->>R: Connect\n R-->>K: Authoritative join/leave evidence\n C->>K: Query attendance, sessions, and published recordings`}),`\n`,_jsx(Heading,{level:`2`,id:`roles-and-moderation`,children:`Roles and moderation`}),`\n`,_jsx(_components.p,{children:`Render actions from the effective event role and current settings. A host or moderator may receive management actions; an ordinary participant does not. Always handle a rejected mutation because roles or live permissions can change after the screen was loaded.`}),`\n`,_jsx(Heading,{level:`2`,id:`chat-hand-state-and-presentation`,children:`Chat, hand state, and presentation`}),`\n`,_jsx(_components.p,{children:`Use documented Classroom GraphQL operations for application state. Do not invent a parallel chat, admission, or attendance system and expect it to appear in Kralis history.`}),`\n`,_jsx(Heading,{level:`2`,id:`recordings`,children:`Recordings`}),`\n`,_jsx(_components.p,{children:`Ordinary participants should see only recordings the API exposes to them. Managers can receive processing, failed, ready, published, and deleted states according to authorization. Never expose a playback URL beyond its intended user or assume it is permanent.`}),`\n`,_jsx(Heading,{level:`2`,id:`whiteboards`,children:`Whiteboards`}),`\n`,_jsx(_components.p,{children:`Whiteboards can exist without an event. A client may list boards available to the user and attach or open them through documented operations. Editing access and live-view behavior remain subject to current Kralis permissions.`}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Do not embed infrastructure credentials, construct realtime room names, or bypass Kralis admission with arbitrary meeting links. Always request access and room credentials through authenticated Kralis operations.`})}),`\n`,_jsxs(_components.p,{children:[`Use `,_jsx(_components.a,{href:`https://api.kralis.app/graphiql/`,children:`GraphiQL`}),` to inspect the current `,_jsx(_components.code,{children:`classroom`}),` queries, mutations, inputs, connection fields, and responses.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Classroom API Integration","description":"Build a Kralis-branded Classroom client without bypassing event access, admission, attendance, or recording rules.","sidebarTitle":"Classroom Integration","href":"/developers/classroom-integration"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Core concepts","slug":"core-concepts","depth":2,"children":[]},{"title":"Recommended join flow","slug":"recommended-join-flow","depth":2,"children":[]},{"title":"Roles and moderation","slug":"roles-and-moderation","depth":2,"children":[]},{"title":"Chat, hand state, and presentation","slug":"chat-hand-state-and-presentation","depth":2,"children":[]},{"title":"Recordings","slug":"recordings","depth":2,"children":[]},{"title":"Whiteboards","slug":"whiteboards","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"kralis","siteName":"Kralis Docs","title":"Classroom API Integration - Kralis Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-10T11:15:14.634Z","originalFileLocation":"developers/classroom-integration.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Build a Kralis-branded Classroom client without bypassing event access, admission, attendance, or recording rules.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Kralis Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/kralis/9MaRZZWIjhDk5vLB/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/kralis/9MaRZZWIjhDk5vLB/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/kralis/9MaRZZWIjhDk5vLB/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/kralis/9MaRZZWIjhDk5vLB/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/kralis/9MaRZZWIjhDk5vLB/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/kralis/9MaRZZWIjhDk5vLB/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/kralis/9MaRZZWIjhDk5vLB/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/kralis/9MaRZZWIjhDk5vLB/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/kralis/9MaRZZWIjhDk5vLB/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Classroom API Integration - Kralis Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Build a Kralis-branded Classroom client without bypassing event access, admission, attendance, or recording rules.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Kralis Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.kralis.app/developers/classroom-integration\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://kralis.mintlify.app/_mintlify/api/og/v2?division=Developers\u0026amp;title=Classroom+API+Integration\u0026amp;description=Build+a+Kralis-branded+Classroom+client+without+bypassing+event+access%2C+admission%2C+attendance%2C+or+recording+rules.\u0026amp;theme=b36d97bcc6868b96fbe3ad28\u0026amp;signature=6c8d23b8905c3faf6ff2ea42051f8a124920096f0d9abb4fa809dd76bd4d0d42\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Classroom API Integration - Kralis Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Build a Kralis-branded Classroom client without bypassing event access, admission, attendance, or recording rules.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://kralis.mintlify.app/_mintlify/api/og/v2?division=Developers\u0026amp;title=Classroom+API+Integration\u0026amp;description=Build+a+Kralis-branded+Classroom+client+without+bypassing+event+access%2C+admission%2C+attendance%2C+or+recording+rules.\u0026amp;theme=b36d97bcc6868b96fbe3ad28\u0026amp;signature=6c8d23b8905c3faf6ff2ea42051f8a124920096f0d9abb4fa809dd76bd4d0d42\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/kralis/9MaRZZWIjhDk5vLB/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Kralis Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1447e6\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.kralis.app/developers/classroom-integration\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/developers/classroom-integration.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.kralis.app/#organization\",\"name\":\"Kralis Docs\",\"url\":\"https://docs.kralis.app\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/kralis/fznqxkdoX8eDtEbC/images/branding/logo-light.png?fit=max\u0026auto=format\u0026n=fznqxkdoX8eDtEbC\u0026q=85\u0026s=916bf70db65f407691b6cd0b129939cb\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.kralis.app#website\",\"name\":\"Kralis Docs\",\"url\":\"https://docs.kralis.app\",\"publisher\":{\"@id\":\"https://docs.kralis.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.kralis.app/developers/classroom-integration#webpage\",\"url\":\"https://docs.kralis.app/developers/classroom-integration\",\"name\":\"Classroom API Integration\",\"description\":\"Build a Kralis-branded Classroom client without bypassing event access, admission, attendance, or recording rules.\",\"dateModified\":\"2026-08-10T11:15:14.634Z\",\"isPartOf\":{\"@id\":\"https://docs.kralis.app#website\"},\"breadcrumb\":{\"@id\":\"https://docs.kralis.app/developers/classroom-integration#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.kralis.app/developers/classroom-integration#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Developers\",\"item\":\"https://docs.kralis.app/developers/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Classroom API Integration\",\"item\":\"https://docs.kralis.app/developers/classroom-integration\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.kralis.app/developers/classroom-integration#article\",\"headline\":\"Classroom API Integration\",\"name\":\"Classroom API Integration\",\"description\":\"Build a Kralis-branded Classroom client without bypassing event access, admission, attendance, or recording rules.\",\"url\":\"https://docs.kralis.app/developers/classroom-integration\",\"mainEntityOfPage\":{\"@id\":\"https://docs.kralis.app/developers/classroom-integration#webpage\"},\"dateModified\":\"2026-08-10T11:15:14.634Z\",\"publisher\":{\"@id\":\"https://docs.kralis.app/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.kralis.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Kralis Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Kralis Docs","nav":{"global":{"tabs":[{"tab":"Docs","href":"/"},{"tab":"Roles","href":"/roles/overview"},{"tab":"Results","href":"/results/overview"},{"tab":"Developers","href":"/developers/overview"},{"tab":"Help","href":"/getting-started/get-help"},{"tab":"API","href":"/developers/reference-links"},{"tab":"Integrations","href":"/integrations/overview"}]},"groups":[{"group":"Getting Started","root":{"title":"Kralis Docs","mode":"wide","href":"/index"},"pages":[{"title":"Quickstart","href":"/quickstart"},{"title":"Kralis Changelog","sidebarTitle":"Changelog","href":"/changelogs"},{"title":"Dashboard and Navigation","sidebarTitle":"Dashboard Navigation","href":"/getting-started/dashboard-navigation"},{"title":"Install Kralis","sidebarTitle":"Install Kralis","href":"/getting-started/install-kralis"},{"title":"Get Help","sidebarTitle":"Get Help","href":"/getting-started/get-help"}]},{"group":"Onboarding","root":{"title":"School Onboarding","sidebarTitle":"School Onboarding","href":"/onboarding/school-onboarding"},"pages":[{"title":"Student Details Submissions","href":"/onboarding/student-onboarding"},{"title":"Teacher Details Submissions","href":"/onboarding/teacher-onboarding"}]},{"group":"Roles and Daily Use","root":{"title":"Roles and Daily Use","sidebarTitle":"Overview","href":"/roles/overview"},"pages":[{"title":"Admin and Dean Workflows","sidebarTitle":"Admin and Dean","href":"/roles/admin-and-dean"},{"title":"Teacher Workflows","sidebarTitle":"Teacher","href":"/roles/teacher"},{"title":"Student Workflows","sidebarTitle":"Student","href":"/roles/student"}]},{"group":"School Setup","root":{"title":"School Setup","href":"/school-setup/overview"},"pages":[{"title":"School Settings","href":"/school-setup/school-settings"},{"title":"Years and Terms","href":"/school-setup/years-and-terms"},{"title":"Create the Next Year","sidebarTitle":"Create Next Year","href":"/school-setup/create-next-year"},{"title":"Classes and Sections","href":"/school-setup/classes-and-sections"},{"title":"Entry Score Configurations","href":"/school-setup/entry-score-configurations"},{"title":"Subjects and Users","href":"/school-setup/subjects-and-users"},{"title":"Access PINs","href":"/school-setup/access-pins"}]},{"group":"Planner","root":{"title":"School Planner","href":"/planner/overview"},"pages":[{"title":"Timetables","href":"/planner/timetables"},{"title":"Schemes of Work","href":"/planner/schemes-of-work"},{"title":"Planner Calendar","href":"/planner/calendar"}]},{"group":"Students","root":{"title":"Students","href":"/students/overview"},"pages":[{"title":"Imports and Creation","href":"/students/imports-and-creation"},{"title":"Import Students","sidebarTitle":"Import Students","href":"/students/import-students"},{"title":"Class and Section Changes","href":"/students/class-and-section-changes"},{"title":"Promotions","href":"/students/promotions"},{"title":"Run Promotion","sidebarTitle":"Run Promotion","href":"/students/run-promotion"}]},{"group":"Results","root":{"title":"Results and SRMS","href":"/results/overview"},"pages":[{"title":"Scoresheet and Results","sidebarTitle":"Scoresheet and Results","href":"/results/scoresheet-and-results"},{"title":"Compilations and Reports","sidebarTitle":"Compilations and Reports","href":"/results/compilations-and-reports"},{"title":"Using SRMS as a Teacher","sidebarTitle":"Teacher Guide","href":"/results/teacher-guide"},{"title":"Managing Scoresheets","href":"/results/managing-scoresheets"},{"title":"Generating and Reviewing Results","sidebarTitle":"Generate and Review Results","href":"/results/generating-and-reviewing-results"},{"title":"Result Origins","href":"/results/result-origins"},{"title":"Adding Legacy and External Results","href":"/results/adding-legacy-and-external-results"},{"title":"Remarks, Compilations, and Reports","sidebarTitle":"Remarks and Reports","href":"/results/remarks-compilations-and-reports"}]},{"group":"Attendance","root":{"title":"Attendance","href":"/attendance/overview"},"pages":[{"title":"Attendance Daily Operations","sidebarTitle":"Daily Operations","href":"/attendance/daily-operations"},{"title":"Checking Daily Attendance","sidebarTitle":"Checking Attendance","href":"/attendance/checking-daily-attendance"},{"title":"Reviewing Attendance History","sidebarTitle":"Reviewing History","href":"/attendance/reviewing-history"},{"title":"Managing and Correcting Attendance","sidebarTitle":"Managing Attendance","href":"/attendance/managing-and-correcting"},{"title":"Attendance Calendar and Statuses","sidebarTitle":"Calendar and Statuses","href":"/attendance/calendar-and-statuses"}]},{"group":"CBT","root":{"title":"Computer-Based Testing","href":"/cbt/overview"},"pages":[{"title":"Tests and Questions","sidebarTitle":"Tests and Questions","href":"/cbt/tests-and-questions"},{"title":"Creating CBT Tests","href":"/cbt/creating-tests"},{"title":"Managing Questions and Answers","href":"/cbt/questions-and-answers"},{"title":"Running a CBT Session","href":"/cbt/running-sessions"},{"title":"Taking a Test as a Student","sidebarTitle":"Student Guide","href":"/cbt/student-guide"},{"title":"Reviewing Performance and Syncing Scores","sidebarTitle":"Performance and Score Sync","href":"/cbt/performance-and-score-sync"}]},{"group":"LMS","root":{"title":"Learning Management System","href":"/lms/overview"},"pages":[{"title":"Courses and Enrollments","sidebarTitle":"Courses and Enrollments","href":"/lms/courses-and-enrollments"},{"title":"Using LMS as a Course Author","sidebarTitle":"Course Author Guide","href":"/lms/course-author-guide"},{"title":"Building Modules, Lessons, and Units","sidebarTitle":"Building Course Content","href":"/lms/building-course-content"},{"title":"Managing Enrollments","href":"/lms/managing-enrollments"},{"title":"Taking a Course as a Student","sidebarTitle":"Student Guide","href":"/lms/student-guide"},{"title":"Course Progress and Assessments","href":"/lms/progress-and-assessments"}]},{"group":"Classroom","root":{"title":"Kralis Classroom","sidebarTitle":"Overview","href":"/classroom/overview"},"pages":[{"title":"Using Classroom as a Teacher","sidebarTitle":"Teacher Guide","href":"/classroom/teacher-guide"},{"title":"Using Classroom as a Student","sidebarTitle":"Student Guide","href":"/classroom/student-guide"},{"title":"Classroom Events and Scheduling","sidebarTitle":"Events and Scheduling","href":"/classroom/events-and-scheduling"},{"title":"Classroom Access and Roles","sidebarTitle":"Access and Roles","href":"/classroom/access-and-roles"},{"title":"Joining and the Live Room","sidebarTitle":"Joining and Live Room","href":"/classroom/joining-and-live-room"},{"title":"Attendance and Session History","sidebarTitle":"Attendance and History","href":"/classroom/attendance-and-history"},{"title":"Classroom Recordings","sidebarTitle":"Recordings","href":"/classroom/recordings"},{"title":"Whiteboards and Collaboration Groups","sidebarTitle":"Whiteboards and Groups","href":"/classroom/whiteboards-and-groups"},{"title":"Managing Whiteboards and Groups","sidebarTitle":"Manage Boards and Groups","href":"/classroom/managing-whiteboards-and-groups"},{"title":"Classroom School Settings","sidebarTitle":"School Settings","href":"/classroom/school-settings-and-operations"}]},{"group":"Fees","root":{"title":"Fees","href":"/fees/overview"},"pages":[{"title":"Setting Up Fees and Accounts","href":"/fees/setup"},{"title":"Assign Fees","sidebarTitle":"Assign Fees","href":"/fees/assign-fees"},{"title":"Assigning Fees","href":"/fees/assigning-fees"},{"title":"Managing Student Invoices","sidebarTitle":"Student Invoices","href":"/fees/managing-invoices"},{"title":"Recording and Reconciling Payments","sidebarTitle":"Recording Payments","href":"/fees/recording-payments"},{"title":"Viewing Fees as a Student","sidebarTitle":"Student Guide","href":"/fees/student-guide"}]},{"group":"School Broadcasts","root":{"title":"School Broadcasts","href":"/broadcasts/overview"},"pages":[{"title":"Creating and Managing Broadcasts","sidebarTitle":"Creating Broadcasts","href":"/broadcasts/managing"}]},{"group":"Kralis AI","root":{"title":"Kralis AI","href":"/ai/overview"},"pages":[{"title":"Chats and History","href":"/ai/chats-and-history"}]},{"group":"User Management","root":{"title":"User Management","href":"/user-management/overview"},"pages":[{"title":"Managing Users, Teachers, and Deans","sidebarTitle":"Users, Teachers, and Deans","href":"/user-management/users-teachers-and-deans"},{"title":"Student Archive","href":"/user-management/student-archive"}]},{"group":"Profile and Account","root":{"title":"Profile and Account Security","sidebarTitle":"Profile and Security","href":"/account/profile-and-security"},"pages":[]},{"group":"School Billing","root":{"title":"School Billing","href":"/billing/overview"},"pages":[]},{"group":"Reference","root":{"title":"Reference","href":"/reference/overview"},"pages":[{"title":"Glossary","href":"/reference/glossary"},{"title":"Roles and Permissions","sidebarTitle":"Roles and Permissions","href":"/reference/roles-and-permissions"}]},{"group":"Developers","root":{"title":"Kralis for Developers","sidebarTitle":"Overview","mode":"wide","href":"/developers/overview"},"pages":[{"title":"Developer Quickstart","sidebarTitle":"Quickstart","href":"/developers/getting-started"},{"title":"School Onboarding API","sidebarTitle":"School Onboarding API","href":"/developers/school-onboarding-api"},{"title":"Authentication","href":"/developers/authentication"},{"title":"Exploring GraphQL with GraphiQL","sidebarTitle":"Using GraphiQL","mode":"wide","href":"/developers/exploring-graphiql"},{"title":"School Scoping and Authorization","sidebarTitle":"School Scoping","href":"/developers/auth-and-scoping"},{"title":"GraphQL and REST","href":"/developers/graphql-and-rest"},{"title":"Building a Kralis Client","sidebarTitle":"Building a Client","href":"/developers/building-clients"},{"title":"Errors, Pagination, and Reliability","sidebarTitle":"Errors and Pagination","href":"/developers/errors-and-pagination"},{"title":"Student Integration Identifiers API","sidebarTitle":"Student Identifiers","mode":"wide","href":"/developers/student-integration-identifiers"},{"title":"Integration Patterns","description":"Choose a practical boundary between Kralis Web, a custom client, and external school systems.","href":"/developers/integration-patterns"},{"title":"Classroom API Integration","sidebarTitle":"Classroom Integration","href":"/developers/classroom-integration"},{"title":"API Access, Templates, and Support","description":"Understand the developer offering, school access, templates, support, and public policy links.","sidebarTitle":"Access and Support","href":"/developers/access-and-support"},{"title":"API Reference Links","sidebarTitle":"API References","href":"/developers/reference-links"}]},{"group":"Integrations","root":{"title":"Integrations","href":"/integrations/overview"},"pages":[{"title":"Student integration identifiers","href":"/integrations/student-identifiers"},{"title":"ESMOE Excel workflow","href":"/integrations/esmoe"},{"title":"Klapp integration","href":"/integrations/klapp"},{"title":"CDE result API","href":"/integrations/cde"}]}]},"title":"Classroom API Integration - Kralis Docs","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":[],"chunks":[]}