A GraphQL HTTP response can contain errors even when the transport request completed. Check both data and errors; do not treat HTTP 200 alone as application success.
Error class
Client response
Authentication
Refresh once when appropriate, otherwise sign out
Authorization
Stop the action and update the UI to reflect unavailable access
Validation
Preserve inputs and show the server message near the action or field
Not found
Remove stale selection and return to an available list
Rate limit
Disable repeated submission and retry only after the indicated window
Provider or temporary failure
Keep persisted Kralis state authoritative and offer a safe retry
Use HTTP status and the documented response body. Handle invalid credentials, expired tokens, forbidden access, validation errors, rate limits, and server failures separately.
Never silently assume a fixed first page contains the whole school. Search selectors, event lists, students, recordings, and other growing datasets must support pagination.
Queries are generally safe to retry. Mutations may not be. Disable duplicate submission, retain operation state, and refetch after an uncertain response before repeating a create, payment, result, promotion, or recording action.
Another Kralis Web user or custom client can change the same school data. Refetch after important mutations, use realtime or polling only where the product contract supports it, and avoid assuming cached permissions remain valid forever.
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/errors-and-pagination","slug":"/developers/errors-and-pagination","pageMetadata":{"title":"Errors, Pagination, and Reliability","description":"Handle GraphQL and REST failures, cursor connections, retries, and changing school data.","sidebarTitle":"Errors and Pagination","href":"/developers/errors-and-pagination"},"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: \"Handle GraphQL and REST failures, cursor connections, retries, and changing school data.\"\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={code:`code`,p:`p`,pre:`pre`,span:`span`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,Mermaid,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`graphql-errors`,children:`GraphQL errors`}),`\n`,_jsxs(_components.p,{children:[`A GraphQL HTTP response can contain `,_jsx(_components.code,{children:`errors`}),` even when the transport request completed. Check both `,_jsx(_components.code,{children:`data`}),` and `,_jsx(_components.code,{children:`errors`}),`; do not treat HTTP `,_jsx(_components.code,{children:`200`}),` alone as application success.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Error class`}),_jsx(_components.th,{children:`Client response`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Authentication`}),_jsx(_components.td,{children:`Refresh once when appropriate, otherwise sign out`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Authorization`}),_jsx(_components.td,{children:`Stop the action and update the UI to reflect unavailable access`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Validation`}),_jsx(_components.td,{children:`Preserve inputs and show the server message near the action or field`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Not found`}),_jsx(_components.td,{children:`Remove stale selection and return to an available list`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Rate limit`}),_jsx(_components.td,{children:`Disable repeated submission and retry only after the indicated window`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Provider or temporary failure`}),_jsx(_components.td,{children:`Keep persisted Kralis state authoritative and offer a safe retry`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`rest-errors`,children:`REST errors`}),`\n`,_jsx(_components.p,{children:`Use HTTP status and the documented response body. Handle invalid credentials, expired tokens, forbidden access, validation errors, rate limits, and server failures separately.`}),`\n`,_jsx(Heading,{level:`2`,id:`cursor-pagination`,children:`Cursor pagination`}),`\n`,_jsx(_components.p,{children:`Kralis GraphQL lists commonly use Relay-style connections.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`16`,language:`graphql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`graphql`,children:_jsxs(_components.code,{language:`graphql`,numberOfLines:`16`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`query`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` ListStudents`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`$first`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Int`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`$after`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`String`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` students`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`first`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`$first`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`after`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`$after`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` edges`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` node`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` pk`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` username`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` fullName`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` pageInfo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` hasNextPage`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` endCursor`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` totalCount`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Mermaid,{chart:`flowchart LR\n A[Fetch first page] --> B[Render edges]\n B --> C{hasNextPage?}\n C -->|Yes| D[Fetch with endCursor]\n D --> E[Merge by stable node ID]\n E --> C\n C -->|No| F[Complete list]`}),`\n`,_jsx(_components.p,{children:`Never silently assume a fixed first page contains the whole school. Search selectors, event lists, students, recordings, and other growing datasets must support pagination.`}),`\n`,_jsx(Heading,{level:`2`,id:`retry-safety`,children:`Retry safety`}),`\n`,_jsx(_components.p,{children:`Queries are generally safe to retry. Mutations may not be. Disable duplicate submission, retain operation state, and refetch after an uncertain response before repeating a create, payment, result, promotion, or recording action.`}),`\n`,_jsx(Heading,{level:`2`,id:`changing-data`,children:`Changing data`}),`\n`,_jsx(_components.p,{children:`Another Kralis Web user or custom client can change the same school data. Refetch after important mutations, use realtime or polling only where the product contract supports it, and avoid assuming cached permissions remain valid forever.`})]})}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":"Errors, Pagination, and Reliability","description":"Handle GraphQL and REST failures, cursor connections, retries, and changing school data.","sidebarTitle":"Errors and Pagination","href":"/developers/errors-and-pagination"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"GraphQL errors","slug":"graphql-errors","depth":2,"children":[]},{"title":"REST errors","slug":"rest-errors","depth":2,"children":[]},{"title":"Cursor pagination","slug":"cursor-pagination","depth":2,"children":[]},{"title":"Retry safety","slug":"retry-safety","depth":2,"children":[]},{"title":"Changing data","slug":"changing-data","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"kralis","siteName":"Kralis Docs","title":"Errors, Pagination, and Reliability - Kralis Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-12T01:46:34.513Z","originalFileLocation":"developers/errors-and-pagination.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=\"Handle GraphQL and REST failures, cursor connections, retries, and changing school data.\">\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=\"Errors, Pagination, and Reliability - Kralis Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Handle GraphQL and REST failures, cursor connections, retries, and changing school data.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Kralis Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.kralis.app/developers/errors-and-pagination\">\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=Errors%2C+Pagination%2C+and+Reliability\u0026amp;description=Handle+GraphQL+and+REST+failures%2C+cursor+connections%2C+retries%2C+and+changing+school+data.\u0026amp;theme=b36d97bcc6868b96fbe3ad28\u0026amp;signature=2f3797b22728980264e1544195a787672368923e560c87f21cdf6e209fe89371\">\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=\"Errors, Pagination, and Reliability - Kralis Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Handle GraphQL and REST failures, cursor connections, retries, and changing school data.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://kralis.mintlify.app/_mintlify/api/og/v2?division=Developers\u0026amp;title=Errors%2C+Pagination%2C+and+Reliability\u0026amp;description=Handle+GraphQL+and+REST+failures%2C+cursor+connections%2C+retries%2C+and+changing+school+data.\u0026amp;theme=b36d97bcc6868b96fbe3ad28\u0026amp;signature=2f3797b22728980264e1544195a787672368923e560c87f21cdf6e209fe89371\">\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/errors-and-pagination\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/developers/errors-and-pagination.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/errors-and-pagination#webpage\",\"url\":\"https://docs.kralis.app/developers/errors-and-pagination\",\"name\":\"Errors, Pagination, and Reliability\",\"description\":\"Handle GraphQL and REST failures, cursor connections, retries, and changing school data.\",\"dateModified\":\"2026-08-12T01:46:34.513Z\",\"isPartOf\":{\"@id\":\"https://docs.kralis.app#website\"},\"breadcrumb\":{\"@id\":\"https://docs.kralis.app/developers/errors-and-pagination#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.kralis.app/developers/errors-and-pagination#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Developers\",\"item\":\"https://docs.kralis.app/developers/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Errors, Pagination, and Reliability\",\"item\":\"https://docs.kralis.app/developers/errors-and-pagination\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.kralis.app/developers/errors-and-pagination#article\",\"headline\":\"Errors, Pagination, and Reliability\",\"name\":\"Errors, Pagination, and Reliability\",\"description\":\"Handle GraphQL and REST failures, cursor connections, retries, and changing school data.\",\"url\":\"https://docs.kralis.app/developers/errors-and-pagination\",\"mainEntityOfPage\":{\"@id\":\"https://docs.kralis.app/developers/errors-and-pagination#webpage\"},\"dateModified\":\"2026-08-12T01:46:34.513Z\",\"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","description":"Structure authentication, API access, permissions, caching, and school workflows in a custom frontend.","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","description":"Use GraphQL to query, create, update, synchronize, replace, and remove external student identifiers.","sidebarTitle":"Student Identifiers","mode":"wide","href":"/developers/student-integration-identifiers"},{"title":"Integration Patterns","href":"/developers/integration-patterns"},{"title":"Classroom API Integration","sidebarTitle":"Classroom Integration","href":"/developers/classroom-integration"},{"title":"API Access, Templates, and Support","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":"Errors, Pagination, and Reliability - Kralis Docs","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":[],"chunks":[]}