Offset-style pagination is not a snapshot. Concurrent creates or updates can affect later pages. For repeatable incremental processing, use a stable business checkpoint and an explicit time window rather than assuming pages remain unchanged.
Collection responses return page, pageSize, totalPages, totalElements, and items. The public contract does not separately define special behavior for an out-of-range page or the exact totalPages value when no records match. Use the values in the response rather than hard-coding an assumption.
Use one endpoint-supported scalar field. Prefix it with - for descending order.
sort=createdAtsort=-updatedAt
Multiple fields and whitespace are rejected. Null values sort first in ascending order and last in descending order.
A single sort field is not an idempotency or snapshot mechanism. Persist processed resource IDs or source checkpoints where duplicates would be harmful.
The endpoint controls which fields and operators are valid. A syntactically valid filter can still fail with UNSUPPORTED_FILTER_FIELD or UNSUPPORTED_FILTER_OPERATOR.
The public contract does not state a separate maximum filter-expression length. Keep expressions bounded, prefer several targeted requests over one excessively complex expression, and handle normal request-validation or payload-limit responses.
Check quoting, escaping, parentheses, and IN syntax
UNSUPPORTED_FILTER_FIELD
Field is not filterable on the endpoint
Use a field listed by the operation
UNSUPPORTED_FILTER_OPERATOR
Operator is not allowed for the field
Use a compatible operator
UNSUPPORTED_SORT_FIELD
Sort field is not allowed
Use one documented scalar field
UNKNOWN_QUERY_PARAMETER
Query name is not supported
Remove the unknown parameter
Last modified on August 28, 2026
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"JobHandy Developers","description":"Official JobHandy API documentation for secure HR, workforce, order, incident, division, and payroll integrations.","colors":{"primary":"#00505A","light":"#1FD1B6","dark":"#00505A"},"logo":{"light":"https://mintcdn.com/jobhandy/7JrsobpOBQPnQpU4/images/Jobhandy_Logo_green_white_RGB.png?fit=max\u0026auto=format\u0026n=7JrsobpOBQPnQpU4\u0026q=85\u0026s=a7e7a836fc983b471c30c9252f19ea28","dark":"https://mintcdn.com/jobhandy/15Qr7gvPLlVjKkPN/images/jobhandy-logo-dark.svg?fit=max\u0026auto=format\u0026n=15Qr7gvPLlVjKkPN\u0026q=85\u0026s=889e8811bb06f18e9df26f6fca07f85a","href":"https://www.jobhandy.io"},"favicon":{"light":"https://mintcdn.com/jobhandy/7JrsobpOBQPnQpU4/images/Jobhandy-Favicon_256x256_space.png?fit=max\u0026auto=format\u0026n=7JrsobpOBQPnQpU4\u0026q=85\u0026s=8ce840bfd195e203339ad55f07cef2c1","dark":"https://mintcdn.com/jobhandy/7JrsobpOBQPnQpU4/images/Jobhandy-Favicon_256x256_space.png?fit=max\u0026auto=format\u0026n=7JrsobpOBQPnQpU4\u0026q=85\u0026s=8ce840bfd195e203339ad55f07cef2c1"},"api":{"openapi":{"source":"https://assets.jobhandy.io/api-spec/jobhandy-public-api.openapi.json?rev=20261020-api-2.0.0"},"params":{"expanded":"closed","post":["x-client-default-state"]},"playground":{"display":"interactive","proxy":true},"examples":{"defaults":"required","languages":["bash","javascript","python","csharp","powershell"],"prefill":false,"autogenerate":true},"url":"full"},"appearance":{"default":"system"},"background":{"color":{"light":"#FFFFFF","dark":"#00505A"}},"navbar":{"links":[{"href":"https://www.jobhandy.io","label":"JobHandy"},{"href":"https://app.jobhandy.io/admin","label":"Administration"}],"primary":{"type":"button","label":"Open JobHandy","href":"https://app.jobhandy.io"}},"search":{"prompt":"How do I create an API key?"},"fonts":{"heading":{"family":"Satoshi","weight":700,"source":"https://cdn.prod.website-files.com/69b933d003ce13513e3316b1/69b93f6637dfed5a30f079d9_satoshi-bold.woff2","format":"woff2"},"body":{"family":"Satoshi","weight":400,"source":"https://cdn.prod.website-files.com/69b933d003ce13513e3316b1/69b93f66c771407c02111b70_satoshi-regular.woff2","format":"woff2"}},"icons":{"library":"lucide"},"styling":{"eyebrows":"breadcrumbs","codeblocks":{"theme":{"light":"github-light","dark":"github-dark"}},"latex":false},"contextual":{"options":["copy","download-spec","chatgpt","claude"],"display":"header"},"thumbnails":{"fonts":{"family":"Poppins"}},"interaction":{"drilldown":false},"metadata":{"timestamp":true},"navigation":{"directory":"card","languages":[{"language":"en","default":true,"href":"get-started/introduction"},{"language":"de","navbar":{"links":[{"href":"https://www.jobhandy.io","label":"JobHandy"},{"href":"https://app.jobhandy.io/admin","label":"Administration"}],"primary":{"type":"button","label":"JobHandy öffnen","href":"https://app.jobhandy.io"}},"href":"de/get-started/introduction"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"jobhandy","hasAudioNarration":false,"actualSubdomain":"jobhandy","customDomains":["developers.jobhandy.io"],"gitSource":{"type":"gitlab","owner":"jobhandy","repo":"jobhandy_apidocs","deployBranch":"import-mintlify-docs","contentDirectory":"","isPrivate":true,"projectId":88749629,"mountPath":"","label":"","_id":"6af30f5c2461d4bf973a09a4"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6af30f5c2461d4bf973a09ae","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"en","tag":"Documentation","count":32},{"language":"de","tag":"Dokumentation","count":32},{"language":"en","tag":"API Reference","count":29},{"language":"de","tag":"API-Referenz","count":29},{"language":"en","tag":"Architecture \u0026 Concepts","count":15},{"language":"de","tag":"Architektur \u0026 Konzepte","count":15},{"language":"en","tag":"Integration Guides","count":7},{"language":"de","tag":"Integrationsleitfäden","count":7},{"language":"en","tag":"Data Models","count":6},{"language":"de","tag":"Datenmodelle","count":6},{"language":"en","tag":"Incidents","count":5},{"language":"en","tag":"Get Started","count":5},{"language":"en","tag":"Operations","count":5},{"language":"de","tag":"Vorfälle","count":5},{"language":"de","tag":"Erste Schritte","count":5},{"language":"de","tag":"Betrieb","count":5},{"language":"en","tag":"Divisions","count":4},{"language":"en","tag":"Employees","count":4},{"language":"de","tag":"Divisionen","count":4},{"language":"de","tag":"Mitarbeiter","count":4}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"frank.offermann@jobhandy.io"}},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","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":"rbac-expansion","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":"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":"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":"full-page-search","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":"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":"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":"turbopuffer-dual-write","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},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":"@font-face{font-family:'JobHandy Display';src:url('https://cdn.prod.website-files.com/69b933d003ce13513e3316b1/69b93f6625e131cbe61fab09_GT-Walsheim-black.woff2') format('woff2');font-style:normal;font-weight:900;font-display:swap}#page-title{font-family:'JobHandy Display', 'Satoshi', 'Poppins', sans-serif;font-weight:900;line-height:1}html.dark{--gray-400: 255 255 255;--gray-500: 255 255 255}"}],"page":{"pagePath":"concepts/pagination-filtering","slug":"/concepts/pagination-filtering","pageMetadata":{"title":"Pagination, filtering, and sorting","sidebarTitle":"Pagination \u0026 Filtering","description":"Build precise collection queries with page traversal, one-field sorting, UTC windows, and the filter expression language.","mode":"wide","href":"/concepts/pagination-filtering"},"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 precise collection queries with page traversal, one-field sorting, UTC windows, and the filter expression language.\"\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,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);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:`Collection endpoints use the same query model. Each operation lists the exact public scalar fields available for filtering and sorting.`}),`\n`,_jsx(Heading,{level:`2`,id:`pagination`,children:`Pagination`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Parameter`}),_jsx(_components.th,{style:{textAlign:`right`},children:`Default`}),_jsx(_components.th,{children:`Constraint`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`page`})}),_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`right`},children:_jsx(_components.code,{children:`1`})}),_jsx(_components.td,{children:`One-based integer`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`pageSize`})}),_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`right`},children:_jsx(_components.code,{children:`100`})}),_jsxs(_components.td,{children:[`Integer from `,_jsx(_components.code,{children:`1`}),` through `,_jsx(_components.code,{children:`1000`})]})]})]})]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`curl`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --get`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` 'https://api.jobhandy.io/v1/employees'`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --header`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` 'X-API-Key: YOUR_API_KEY'`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --data-urlencode`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` 'page=1'`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --data-urlencode`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` 'pageSize=250'`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`reliable-page-traversal`,children:`Reliable page traversal`}),`\n`,_jsx(Mermaid,{chart:`flowchart TD\n A[Define tenant and filter window] --> B[Request page 1]\n B --> C[Process items]\n C --> D[Persist checkpoint]\n D --> E{Last page?}\n E -- No --> F[Request next page]\n F --> C\n E -- Yes --> G[Complete run]`}),`\n`,_jsx(_components.p,{children:`Offset-style pagination is not a snapshot. Concurrent creates or updates can affect later pages. For repeatable incremental processing, use a stable business checkpoint and an explicit time window rather than assuming pages remain unchanged.`}),`\n`,_jsx(Heading,{level:`3`,id:`page-metadata-and-edge-cases`,children:`Page metadata and edge cases`}),`\n`,_jsxs(_components.p,{children:[`Collection responses return `,_jsx(_components.code,{children:`page`}),`, `,_jsx(_components.code,{children:`pageSize`}),`, `,_jsx(_components.code,{children:`totalPages`}),`, `,_jsx(_components.code,{children:`totalElements`}),`, and `,_jsx(_components.code,{children:`items`}),`. The public contract does not separately define special behavior for an out-of-range page or the exact `,_jsx(_components.code,{children:`totalPages`}),` value when no records match. Use the values in the response rather than hard-coding an assumption.`]}),`\n`,_jsx(Heading,{level:`2`,id:`sorting`,children:`Sorting`}),`\n`,_jsxs(_components.p,{children:[`Use one endpoint-supported scalar field. Prefix it with `,_jsx(_components.code,{children:`-`}),` for descending order.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`sort=createdAt`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`sort=-updatedAt`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`Multiple fields and whitespace are rejected. Null values sort first in ascending order and last in descending order.`}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`A single sort field is not an idempotency or snapshot mechanism. Persist processed resource IDs or source checkpoints where duplicates would be harmful.`})}),`\n`,_jsx(Heading,{level:`2`,id:`created-at-window`,children:`Created-at window`}),`\n`,_jsxs(_components.p,{children:[`Where documented, `,_jsx(_components.code,{children:`createdAtFrom`}),` and `,_jsx(_components.code,{children:`createdAtTo`}),` are inclusive ISO-8601 UTC timestamps ending in `,_jsx(_components.code,{children:`Z`}),`.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`createdAtFrom=2026-08-01T00:00:00.000Z`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`createdAtTo=2026-08-31T23:59:59.999Z`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`filter-operators`,children:`Filter operators`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`= != > >= \u003c \u003c=`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`IN (...)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`CONTAINS`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`STARTS_WITH`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`ENDS_WITH`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`IS NULL`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`IS NOT NULL`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`AND`}),` binds before `,_jsx(_components.code,{children:`OR`}),`. Use parentheses when the intended grouping should be explicit.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`blocked=false AND (countryCode=\"DE\" OR countryCode=\"AT\")`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`string-values-and-quoting`,children:`String values and quoting`}),`\n`,_jsx(_components.p,{children:`String comparison is case-insensitive. These forms are supported:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`lastName=Example`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`lastName=\"Example\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`lastName='Example'`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`Values containing whitespace must be quoted:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`lastName='van Example'`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`lastName=\"van Example\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`Escape an apostrophe with a backslash:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`lastName='O\\\\'Example'`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`lastName=\"O\\\\'Example\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`The examples above show decoded filter expressions. URL-encode the complete query value. `,_jsx(_components.code,{children:`curl --data-urlencode`}),` is recommended.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`curl`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --get`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` 'https://api.jobhandy.io/v1/employees'`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --header`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` 'X-API-Key: YOUR_API_KEY'`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --data-urlencode`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` 'filter=lastName=\"van Example\"'`})]}),`\n`]})})}),`\n`,_jsxs(Heading,{level:`2`,id:`in-null-and-text-operators`,children:[_jsx(_components.code,{children:`IN`}),`, null, and text operators`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`countryCode IN (\"DE\",\"AT\",\"CH\")`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`divisionId IS NULL`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`privateEmail IS NOT NULL`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`lastName STARTS_WITH \"M\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`additionalInfo CONTAINS \"Building B\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`formal-expression-model`,children:`Formal expression model`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`expression = term, { \"OR\", term };`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`term = factor, { \"AND\", factor };`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`factor = comparison | \"(\", expression, \")\";`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`comparison = field, operator, value;`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`The endpoint controls which fields and operators are valid. A syntactically valid filter can still fail with `,_jsx(_components.code,{children:`UNSUPPORTED_FILTER_FIELD`}),` or `,_jsx(_components.code,{children:`UNSUPPORTED_FILTER_OPERATOR`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`query-size-boundaries`,children:`Query-size boundaries`}),`\n`,_jsx(_components.p,{children:`The public contract does not state a separate maximum filter-expression length. Keep expressions bounded, prefer several targeted requests over one excessively complex expression, and handle normal request-validation or payload-limit responses.`}),`\n`,_jsx(Heading,{level:`2`,id:`filter-failures`,children:`Filter failures`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Error code`}),_jsx(_components.th,{children:`Cause`}),_jsx(_components.th,{children:`Action`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`INVALID_FILTER_SYNTAX`})}),_jsx(_components.td,{children:`Expression cannot be parsed`}),_jsxs(_components.td,{children:[`Check quoting, escaping, parentheses, and `,_jsx(_components.code,{children:`IN`}),` syntax`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`UNSUPPORTED_FILTER_FIELD`})}),_jsx(_components.td,{children:`Field is not filterable on the endpoint`}),_jsx(_components.td,{children:`Use a field listed by the operation`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`UNSUPPORTED_FILTER_OPERATOR`})}),_jsx(_components.td,{children:`Operator is not allowed for the field`}),_jsx(_components.td,{children:`Use a compatible operator`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`UNSUPPORTED_SORT_FIELD`})}),_jsx(_components.td,{children:`Sort field is not allowed`}),_jsx(_components.td,{children:`Use one documented scalar field`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`UNKNOWN_QUERY_PARAMETER`})}),_jsx(_components.td,{children:`Query name is not supported`}),_jsx(_components.td,{children:`Remove the unknown parameter`})]})]})]})]})}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":{"codeStyling":{"theme":{"light":"github-light","dark":"github-dark"}},"config":{},"pageMetadata":{"title":"Pagination, filtering, and sorting","sidebarTitle":"Pagination \u0026 Filtering","description":"Build precise collection queries with page traversal, one-field sorting, UTC windows, and the filter expression language.","mode":"wide","href":"/concepts/pagination-filtering"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Pagination","slug":"pagination","depth":2,"children":[{"title":"Reliable page traversal","slug":"reliable-page-traversal","depth":3,"children":[]},{"title":"Page metadata and edge cases","slug":"page-metadata-and-edge-cases","depth":3,"children":[]}]},{"title":"Sorting","slug":"sorting","depth":2,"children":[]},{"title":"Created-at window","slug":"created-at-window","depth":2,"children":[]},{"title":"Filter operators","slug":"filter-operators","depth":2,"children":[]},{"title":"String values and quoting","slug":"string-values-and-quoting","depth":2,"children":[]},{"title":"IN, null, and text operators","slug":"in-null-and-text-operators","depth":2,"children":[]},{"title":"Formal expression model","slug":"formal-expression-model","depth":2,"children":[]},{"title":"Query-size boundaries","slug":"query-size-boundaries","depth":2,"children":[]},{"title":"Filter failures","slug":"filter-failures","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"jobhandy","siteName":"JobHandy Developers","title":"Pagination, filtering, and sorting - JobHandy Developers","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/concepts/pagination-filtering","matchLevel":0},"de":{"href":"/de/concepts/pagination-filtering","matchLevel":1}}},"lastModified":"2026-08-28T07:57:36.134Z","gitLastModified":"2026-08-28T07:57:15.000Z","originalFileLocation":"concepts/pagination-filtering.mdx","locale":"en"},"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 precise collection queries with page traversal, one-field sorting, UTC windows, and the filter expression language.\">\u003cmeta data-mint-head name=\"application-name\" content=\"JobHandy Developers\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/jobhandy/SP5ZgDt4U4Hbtqxi/_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/jobhandy/SP5ZgDt4U4Hbtqxi/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/jobhandy/SP5ZgDt4U4Hbtqxi/_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/jobhandy/SP5ZgDt4U4Hbtqxi/_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/jobhandy/SP5ZgDt4U4Hbtqxi/_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/jobhandy/SP5ZgDt4U4Hbtqxi/_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/jobhandy/SP5ZgDt4U4Hbtqxi/_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/jobhandy/SP5ZgDt4U4Hbtqxi/_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/jobhandy/SP5ZgDt4U4Hbtqxi/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Pagination, filtering, and sorting - JobHandy Developers\">\u003cmeta data-mint-head property=\"og:description\" content=\"Build precise collection queries with page traversal, one-field sorting, UTC windows, and the filter expression language.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"JobHandy Developers\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developers.jobhandy.io/concepts/pagination-filtering\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://jobhandy.mintlify.site/_mintlify/api/og/v2?division=Architecture+%26+Concepts\u0026amp;title=Pagination%2C+filtering%2C+and+sorting\u0026amp;description=Build+precise+collection+queries+with+page+traversal%2C+one-field+sorting%2C+UTC+windows%2C+and+the+filter+expression+language.\u0026amp;theme=084c06ca2711223b8e18ec62\u0026amp;signature=0f2d12453298f1dac705435b462949ef03d4f433614473f378c34edd0901500f\">\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=\"Pagination, filtering, and sorting - JobHandy Developers\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Build precise collection queries with page traversal, one-field sorting, UTC windows, and the filter expression language.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://jobhandy.mintlify.site/_mintlify/api/og/v2?division=Architecture+%26+Concepts\u0026amp;title=Pagination%2C+filtering%2C+and+sorting\u0026amp;description=Build+precise+collection+queries+with+page+traversal%2C+one-field+sorting%2C+UTC+windows%2C+and+the+filter+expression+language.\u0026amp;theme=084c06ca2711223b8e18ec62\u0026amp;signature=0f2d12453298f1dac705435b462949ef03d4f433614473f378c34edd0901500f\">\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/jobhandy/SP5ZgDt4U4Hbtqxi/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"JobHandy Developers\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#00505A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developers.jobhandy.io/concepts/pagination-filtering\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/concepts/pagination-filtering.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://developers.jobhandy.io/concepts/pagination-filtering\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"de\" href=\"https://developers.jobhandy.io/de/concepts/pagination-filtering\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://developers.jobhandy.io/concepts/pagination-filtering\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developers.jobhandy.io/#organization\",\"name\":\"JobHandy Developers\",\"url\":\"https://developers.jobhandy.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/jobhandy/7JrsobpOBQPnQpU4/images/Jobhandy_Logo_green_white_RGB.png?fit=max\u0026auto=format\u0026n=7JrsobpOBQPnQpU4\u0026q=85\u0026s=a7e7a836fc983b471c30c9252f19ea28\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developers.jobhandy.io#website\",\"name\":\"JobHandy Developers\",\"url\":\"https://developers.jobhandy.io\",\"publisher\":{\"@id\":\"https://developers.jobhandy.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developers.jobhandy.io/concepts/pagination-filtering#webpage\",\"url\":\"https://developers.jobhandy.io/concepts/pagination-filtering\",\"name\":\"Pagination, filtering, and sorting\",\"description\":\"Build precise collection queries with page traversal, one-field sorting, UTC windows, and the filter expression language.\",\"dateModified\":\"2026-08-28T07:57:15.000Z\",\"isPartOf\":{\"@id\":\"https://developers.jobhandy.io#website\"},\"breadcrumb\":{\"@id\":\"https://developers.jobhandy.io/concepts/pagination-filtering#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developers.jobhandy.io/concepts/pagination-filtering#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Architecture \u0026 Concepts\",\"item\":\"https://developers.jobhandy.io/concepts/architecture-resource-model\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pagination, filtering, and sorting\",\"item\":\"https://developers.jobhandy.io/concepts/pagination-filtering\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://developers.jobhandy.io/concepts/pagination-filtering#article\",\"headline\":\"Pagination, filtering, and sorting\",\"name\":\"Pagination, filtering, and sorting\",\"description\":\"Build precise collection queries with page traversal, one-field sorting, UTC windows, and the filter expression language.\",\"url\":\"https://developers.jobhandy.io/concepts/pagination-filtering\",\"mainEntityOfPage\":{\"@id\":\"https://developers.jobhandy.io/concepts/pagination-filtering#webpage\"},\"dateModified\":\"2026-08-28T07:57:15.000Z\",\"publisher\":{\"@id\":\"https://developers.jobhandy.io/#organization\"},\"isPartOf\":{\"@id\":\"https://developers.jobhandy.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"JobHandy Developers\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"JobHandy Developers\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/concepts/pagination-filtering.md","siteName":"JobHandy Developers","nav":{"global":null,"directory":"card","languages":[{"language":"en","default":true,"tabs":[{"tab":"Documentation","groups":[{"group":"Get Started","pages":[{"title":"JobHandy Public API","sidebarTitle":"Introduction","mode":"wide","href":"/get-started/introduction"},{"title":"Create and manage API keys","sidebarTitle":"API Key Management","mode":"wide","href":"/get-started/api-key-management"},{"title":"Authentication and access scope","sidebarTitle":"Authentication","href":"/get-started/authentication"},{"title":"Quickstart","sidebarTitle":"Quickstart","mode":"wide","href":"/get-started/quickstart"},{"title":"Go-live checklist","sidebarTitle":"Go-live Checklist","href":"/get-started/go-live-checklist"}]},{"group":"Architecture \u0026 Concepts","pages":[{"title":"Architecture and resource model","sidebarTitle":"Architecture \u0026 Resource Model","mode":"wide","href":"/concepts/architecture-resource-model"},{"title":"Terminology","sidebarTitle":"Terminology","href":"/concepts/terminology"},{"title":"Environments and testing","sidebarTitle":"Environments \u0026 Testing","href":"/concepts/environments-testing"},{"title":"Tenant scope and resource placement","sidebarTitle":"Tenant Scope","href":"/concepts/tenant-scope"},{"title":"Request and response conventions","sidebarTitle":"Request \u0026 Response","href":"/concepts/request-response"},{"title":"Data types and formats","sidebarTitle":"Data Types \u0026 Formats","description":"Use the exact identifier, timestamp, date, month, country, enum, money, nullability, and file conventions.","href":"/concepts/data-types-formats"},{"title":"Pagination, filtering, and sorting","sidebarTitle":"Pagination \u0026 Filtering","mode":"wide","href":"/concepts/pagination-filtering"},{"title":"Dry-run validation","sidebarTitle":"Dry Runs","description":"Validate supported writes against current scope and state without persistence or documented side effects.","href":"/concepts/dry-runs"},{"title":"Request IDs and correlation","sidebarTitle":"Request IDs","href":"/concepts/request-ids"},{"title":"Retries, idempotency, and ambiguous outcomes","sidebarTitle":"Retries \u0026 Idempotency","mode":"wide","href":"/concepts/retries-idempotency"},{"title":"Error handling","sidebarTitle":"Error Handling","mode":"wide","href":"/concepts/error-handling"},{"title":"Rate limits and backoff","sidebarTitle":"Rate Limits","href":"/concepts/rate-limits"},{"title":"Security and data protection","sidebarTitle":"Security \u0026 Data Protection","href":"/concepts/security-data-protection"},{"title":"Capabilities and limitations","sidebarTitle":"Capabilities \u0026 Limitations","mode":"wide","href":"/concepts/capabilities-limitations"},{"title":"Versioning and compatibility","sidebarTitle":"Versioning","href":"/concepts/versioning"}]},{"group":"Integration Guides","pages":[{"title":"Synchronize employees","sidebarTitle":"Sync Employees","mode":"wide","href":"/guides/sync-employees"},{"title":"Employee offboarding","sidebarTitle":"Employee Offboarding","href":"/guides/employee-offboarding"},{"title":"Process orders and HR decisions","sidebarTitle":"Process Orders","mode":"wide","href":"/guides/process-orders"},{"title":"Manage employee incidents","sidebarTitle":"Manage Incidents","mode":"wide","href":"/guides/manage-incidents"},{"title":"Manage division hierarchies","sidebarTitle":"Manage Divisions","mode":"wide","href":"/guides/manage-divisions"},{"title":"Retrieve payroll export documents","sidebarTitle":"Payroll Exports","mode":"wide","href":"/guides/payroll-exports"},{"title":"Rotate API keys","sidebarTitle":"Rotate API Keys","href":"/guides/rotate-api-keys"}]},{"group":"Operations","pages":[{"title":"Tooling and OpenAPI","sidebarTitle":"Tooling \u0026 OpenAPI","href":"/operations/tooling-openapi"},{"title":"Troubleshooting","sidebarTitle":"Troubleshooting","mode":"wide","href":"/operations/troubleshooting"},{"title":"Frequently asked questions","sidebarTitle":"FAQ","href":"/operations/faq"},{"title":"Support and escalation","sidebarTitle":"Support","href":"/operations/support"},{"title":"API changelog","sidebarTitle":"Changelog","href":"/operations/changelog"}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/overview"}]}]},{"language":"de","navbar":{"links":[{"href":"https://www.jobhandy.io","label":"JobHandy"},{"href":"https://app.jobhandy.io/admin","label":"Administration"}],"primary":{"type":"button","label":"JobHandy öffnen","href":"https://app.jobhandy.io"}},"pages":[{"title":"de","href":"/de/concepts/pagination-filtering"}]}]},"basePath":"","title":"Pagination, filtering, and sorting - JobHandy Developers","buildId":"dpl_596ePT575z4qnAFksq1biRW97aLY","deploymentId":"dpl_596ePT575z4qnAFksq1biRW97aLY","dynamics":[],"chunks":[]}