Validate submitted data at your server and report errors back to users for correction and re-upload.
Server-side validation checks incoming data against your own business rules on your server, then relays any errors back to the importer. The check can be as simple as verifying that a user ID exists in your database, or something more complex that involves custom logic. Users then fix the errors and re-submit the data.
Users upload the spreadsheet, map columns, verify data, and then submit.
3
The importer pushes the data to your API endpoint
The importer sends the spreadsheet data via POST requests with JSON values to the API endpoint you configured. The request schema is available here.
4
Your app processes and validates the data
Your app validates the data against your business rules:
Validation succeeds (no errors found): your API returns a 200 HTTP response code, and the user sees the success screen.
Validation fails (one or more errors found): your API returns a 211 HTTP response code along with the validation errors in JSON format. See the error response format.
Your API must return the 211 HTTP response status code to tell the CSVbox importer that there are one or more server-side validation errors.To view the results screen, configure the CSVbox Results Page settings: go to Sheet Settings → Display → Results Page and set Closing the import dialog box to Do not close on import complete.
5
Users see the validation fail screen
If there are one or more server-side validation errors, users see the fail screen with a button to view the errors.
6
Users view the validation errors
Clicking the Errors button takes users to the Verify Data screen with all the server-side errors displayed.
7
Users fix the errors and re-submit the data
On re-submit, the process repeats: the importer pushes the data to your API endpoint via POST requests and looks for errors in the response.
Each re-submit is treated as a fresh import with a new Import_Id.
To let users re-submit all the rows (instead of only the error rows), select the All Rows option as shown below:
CSVbox server-side validation supports the following error types:
table: Shows high-level or common errors that apply to the entire upload. Renders as a dismissible alert above the grid.
row: Shows errors that apply to a whole row, not a specific cell. Renders as a red badge on the row number; clicking it opens a pop-up with the message.
column: Shows validation errors that apply to an entire column. Use these when the issue is with the column itself rather than with any individual row or cell.
cell: The previous behavior; highlights an individual cell with an inline message. This documentation refers to these as “cell errors.”
table: Missing required columns, inconsistent file format, duplicate file, or any condition that makes the whole dataset invalid.
row: Cross-field checks within the same row (for example, “End Date must be after Start Date”), referential issues that aren’t tied to a single column, or row-level business rules.
column: Issues that apply to a full column rather than to one cell or row (for example, an invalid column name, or a required column with an incorrect format or configuration).
cell: Format, length, or pattern errors, disallowed values, or any validation that is clearly attributable to one column.
When Server-Side Validation (SSV) is enabled, the data object received at the client (after submission) includes additional attributes that help you handle validation states programmatically.
Attribute
Description
ssv_enabled
Indicates whether Server-Side Validation is active for the current sheet.
ssv_fail
Set to true only when the server returns a 211 response code, meaning the import failed due to SSV errors.
ssv_row_fail
Number of rows that failed during server-side validation.
ssv_table_error
True if a table-level validation error was returned by the server.
Use these attributes to detect and respond to validation outcomes directly from your client application, for example by displaying custom messages, logging failed rows, or triggering retry logic.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"CSVbox Docs","description":"Welcome to CSVbox documentation and help site!","colors":{"primary":"#007BFF","light":"#E8F2FF","dark":"#007BFF"},"logo":{"light":"https://mintcdn.com/csvbox-io/VaNqBS2QJ21PoHnw/images/1200_square.png?fit=max\u0026auto=format\u0026n=VaNqBS2QJ21PoHnw\u0026q=85\u0026s=561607ac3a031918fe0739aab943dccf","dark":"https://mintcdn.com/csvbox-io/VaNqBS2QJ21PoHnw/images/512_square_white.png?fit=max\u0026auto=format\u0026n=VaNqBS2QJ21PoHnw\u0026q=85\u0026s=8ad5293ff4b6298ddb0743746426514e","href":"https://csvbox.io"},"favicon":{"light":"https://mintcdn.com/csvbox-io/O7UYE5KjK-GepPt6/images/favicon.ico?fit=max\u0026auto=format\u0026n=O7UYE5KjK-GepPt6\u0026q=85\u0026s=e94aec6c4f92c88cd940ad376432ce7b","dark":"https://mintcdn.com/csvbox-io/O7UYE5KjK-GepPt6/images/favicon.ico?fit=max\u0026auto=format\u0026n=O7UYE5KjK-GepPt6\u0026q=85\u0026s=e94aec6c4f92c88cd940ad376432ce7b"},"api":{"openapi":"https://app.csvbox.io/docs?api-docs.json"},"appearance":{"default":"light","strict":true},"navbar":{"links":[{"href":"https://csvbox.canny.io/feature-requests","label":"Suggestions"},{"href":"/change-log","label":"Changelog"},{"href":"https://share.hsforms.com/1ubpg6RBoQgKOISkRMEViwg5auur","label":"Contact"}],"primary":{"type":"button","label":"Login","href":"https://app.csvbox.io/"}},"seo":{"metatags":{"canonical":"https://help.csvbox.io","og:image":"https://csvbox.io/og/default.png","twitter:site":"@csvboxio"}},"styling":{"eyebrows":"breadcrumbs","codeblocks":"dark","latex":false},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"interaction":{"drilldown":true},"metadata":{"timestamp":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"csvbox-io","hasAudioNarration":false,"actualSubdomain":"csvbox-io","customDomains":["help.csvbox.io"],"gitSource":{"type":"github","owner":"csvbox-io","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ae47335c2eaceb0e3448906","collectionId":"aab417ff-9ed3-47ff-a6af-9ce6b205e9ce","liveDeploymentHistoryId":"6ae47335c2eaceb0e3448906","schemaVersion":"v3"},"feedback":{"edits":false,"issues":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6ae47335c2eaceb0e3448906","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Data Destinations","count":29},{"language":"default","tag":"Advanced Installation","count":15},{"language":"default","tag":"Dashboard Settings","count":13},{"language":"default","tag":"Sheet Settings","count":13},{"language":"default","tag":"APIs \u0026 Integrations","count":9},{"language":"default","tag":"Legal","count":7},{"language":"default","tag":"Sheet API","count":6},{"language":"default","tag":"AI Features","count":5},{"language":"default","tag":"Import Steps","count":5},{"language":"default","tag":"Getting Started","count":4}]},"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":"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":"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":"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":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".frame img:not([data-path$=\".svg\"]){border:1px solid rgb(156 163 175)}.dark .frame img:not([data-path$=\".svg\"]){border-color:rgb(55 65 81)}"}],"page":{"pagePath":"advanced-installation/server-side-validation","slug":"/advanced-installation/server-side-validation","pageMetadata":{"title":"Server-Side Validation","description":"Validate submitted data at your server and report errors back to users for correction and re-upload.","href":"/advanced-installation/server-side-validation"},"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: \"Validate submitted data at your server and report errors back to users for correction and re-upload.\"\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`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Frame,Heading,Note,OptimizedImage,Step,Steps,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Server-side validation checks incoming data against your own business rules on your server, then relays any errors back to the importer. The check can be as simple as verifying that a user ID exists in your database, or something more complex that involves custom logic. Users then fix the errors and re-submit the data.`}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-works`,children:`How it works`}),`\n`,_jsx(Frame,{caption:`Server Side Validation`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/csvbox-io/uXP6QLcxo36EECZb/images/external-validation-1.png?fit=max\u0026auto=format\u0026n=uXP6QLcxo36EECZb\u0026q=85\u0026s=594e2a3ff3cd0d2843c6e548bd64f53f`,alt:`Server-side validation flow between the importer and your API`,\"data-og-width\":`2240`,width:`2240`,\"data-og-height\":`1200`,height:`1200`,\"data-path\":`images/external-validation-1.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/csvbox-io/uXP6QLcxo36EECZb/images/external-validation-1.png?w=280\u0026fit=max\u0026auto=format\u0026n=uXP6QLcxo36EECZb\u0026q=85\u0026s=ee3138df8198698833836c19c0bbf4f6 280w, https://mintcdn.com/csvbox-io/uXP6QLcxo36EECZb/images/external-validation-1.png?w=560\u0026fit=max\u0026auto=format\u0026n=uXP6QLcxo36EECZb\u0026q=85\u0026s=78f5222bde174a24e7b76cb654d6558b 560w, https://mintcdn.com/csvbox-io/uXP6QLcxo36EECZb/images/external-validation-1.png?w=840\u0026fit=max\u0026auto=format\u0026n=uXP6QLcxo36EECZb\u0026q=85\u0026s=17a0c67cfa09b55a9379cb4c60366088 840w, https://mintcdn.com/csvbox-io/uXP6QLcxo36EECZb/images/external-validation-1.png?w=1100\u0026fit=max\u0026auto=format\u0026n=uXP6QLcxo36EECZb\u0026q=85\u0026s=c9a7bae5417fab111378d72fa9fd23f7 1100w, https://mintcdn.com/csvbox-io/uXP6QLcxo36EECZb/images/external-validation-1.png?w=1650\u0026fit=max\u0026auto=format\u0026n=uXP6QLcxo36EECZb\u0026q=85\u0026s=57c4174f37d004f9d7f3c1ea82d9c337 1650w, https://mintcdn.com/csvbox-io/uXP6QLcxo36EECZb/images/external-validation-1.png?w=2500\u0026fit=max\u0026auto=format\u0026n=uXP6QLcxo36EECZb\u0026q=85\u0026s=8e17729b38799979d76fb965b4a5cb8b 2500w`})}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Activate server-side validation in the sheet settings`,children:[_jsxs(_components.p,{children:[`Go to `,_jsx(_components.strong,{children:`Edit Sheet`}),` → `,_jsx(_components.strong,{children:`Destination`}),` tab → enable `,_jsx(_components.strong,{children:`Server Side Validation`}),`.`]}),_jsx(Frame,{caption:`Activate Server Side Validation`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/csvbox-io/Fn747PbJ5U7GCAW2/images/server-side-button.jpg?fit=max\u0026auto=format\u0026n=Fn747PbJ5U7GCAW2\u0026q=85\u0026s=f56c16bf81dbbdfe597ff61879701700`,alt:`Server Side Validation toggle in the Destination tab`,\"data-og-width\":`308`,width:`308`,\"data-og-height\":`104`,height:`104`,\"data-path\":`images/server-side-button.jpg`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/csvbox-io/Fn747PbJ5U7GCAW2/images/server-side-button.jpg?w=280\u0026fit=max\u0026auto=format\u0026n=Fn747PbJ5U7GCAW2\u0026q=85\u0026s=9b652a9ff5aa762b04df47c63c288f4d 280w, https://mintcdn.com/csvbox-io/Fn747PbJ5U7GCAW2/images/server-side-button.jpg?w=560\u0026fit=max\u0026auto=format\u0026n=Fn747PbJ5U7GCAW2\u0026q=85\u0026s=2a7f1e76b1f81f756646bbfe1d53676f 560w, https://mintcdn.com/csvbox-io/Fn747PbJ5U7GCAW2/images/server-side-button.jpg?w=840\u0026fit=max\u0026auto=format\u0026n=Fn747PbJ5U7GCAW2\u0026q=85\u0026s=2cf1a476dd4d3d6336ea200f45690f96 840w, https://mintcdn.com/csvbox-io/Fn747PbJ5U7GCAW2/images/server-side-button.jpg?w=1100\u0026fit=max\u0026auto=format\u0026n=Fn747PbJ5U7GCAW2\u0026q=85\u0026s=97565349bb621debe65d6d50e37a647a 1100w, https://mintcdn.com/csvbox-io/Fn747PbJ5U7GCAW2/images/server-side-button.jpg?w=1650\u0026fit=max\u0026auto=format\u0026n=Fn747PbJ5U7GCAW2\u0026q=85\u0026s=445408b35e76c0d61d41c16754214edb 1650w, https://mintcdn.com/csvbox-io/Fn747PbJ5U7GCAW2/images/server-side-button.jpg?w=2500\u0026fit=max\u0026auto=format\u0026n=Fn747PbJ5U7GCAW2\u0026q=85\u0026s=4a605b45f481af68bc2c531062bcc75e 2500w`})}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`The External Validation option is available only for the `,_jsx(_components.a,{href:`/destinations#api--webhook`,children:`API data destination`}),`.`]})})]}),_jsx(Step,{title:`Users upload and submit the spreadsheet`,children:_jsx(_components.p,{children:`Users upload the spreadsheet, map columns, verify data, and then submit.`})}),_jsx(Step,{title:`The importer pushes the data to your API endpoint`,children:_jsxs(_components.p,{children:[`The importer sends the spreadsheet data via `,_jsx(_components.code,{children:`POST`}),` requests with JSON values to the API endpoint you configured. The request schema is available `,_jsx(_components.a,{href:`/destinations/api-webhook#sample-json-post-to-your-api`,children:`here`}),`.`]})}),_jsxs(Step,{title:`Your app processes and validates the data`,children:[_jsx(_components.p,{children:`Your app validates the data against your business rules:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Validation succeeds (no errors found)`}),`: your API returns a `,_jsx(_components.code,{children:`200`}),` HTTP response code, and the user sees the success screen.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Validation fails (one or more errors found)`}),`: your API returns a `,_jsx(_components.code,{children:`211`}),` HTTP response code along with the validation errors in JSON format. See the `,_jsx(_components.a,{href:`/advanced-installation/server-side-validation#error-types`,children:`error response format`}),`.`]}),`\n`]}),_jsxs(Warning,{children:[_jsxs(_components.p,{children:[`Your API must return the `,_jsx(_components.code,{children:`211`}),` HTTP response status code to tell the CSVbox importer that there are one or more server-side validation errors.`]}),_jsxs(_components.p,{children:[`To view the results screen, configure the CSVbox Results Page settings: go to `,_jsx(_components.strong,{children:`Sheet Settings`}),` → `,_jsx(_components.strong,{children:`Display`}),` → `,_jsx(_components.strong,{children:`Results Page`}),` and set `,_jsx(_components.strong,{children:`Closing the import dialog box`}),` to `,_jsx(_components.strong,{children:`Do not close on import complete`}),`.`]})]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/csvbox-io/gyjvlPdP5mzE2jo9/images/do-not-close.jpg?fit=max\u0026auto=format\u0026n=gyjvlPdP5mzE2jo9\u0026q=85\u0026s=fbac9fe16426d22b510b04b68a63e6e6`,alt:`Results Page setting set to Do not close on import complete`,\"data-og-width\":`717`,width:`717`,\"data-og-height\":`349`,height:`349`,\"data-path\":`images/do-not-close.jpg`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/csvbox-io/gyjvlPdP5mzE2jo9/images/do-not-close.jpg?w=280\u0026fit=max\u0026auto=format\u0026n=gyjvlPdP5mzE2jo9\u0026q=85\u0026s=397b3bee7ceb812abb4adc2134b5e7cd 280w, https://mintcdn.com/csvbox-io/gyjvlPdP5mzE2jo9/images/do-not-close.jpg?w=560\u0026fit=max\u0026auto=format\u0026n=gyjvlPdP5mzE2jo9\u0026q=85\u0026s=2cfe3d6ae1be2a8e85f9d5d9816a9cc1 560w, https://mintcdn.com/csvbox-io/gyjvlPdP5mzE2jo9/images/do-not-close.jpg?w=840\u0026fit=max\u0026auto=format\u0026n=gyjvlPdP5mzE2jo9\u0026q=85\u0026s=3e1ea1cf4b27fdfbde271738fb0c75db 840w, https://mintcdn.com/csvbox-io/gyjvlPdP5mzE2jo9/images/do-not-close.jpg?w=1100\u0026fit=max\u0026auto=format\u0026n=gyjvlPdP5mzE2jo9\u0026q=85\u0026s=d32c89ad9bcb3dc036529dd5fb6a66e7 1100w, https://mintcdn.com/csvbox-io/gyjvlPdP5mzE2jo9/images/do-not-close.jpg?w=1650\u0026fit=max\u0026auto=format\u0026n=gyjvlPdP5mzE2jo9\u0026q=85\u0026s=e857d2354c55da575ea4c2ab938280e3 1650w, https://mintcdn.com/csvbox-io/gyjvlPdP5mzE2jo9/images/do-not-close.jpg?w=2500\u0026fit=max\u0026auto=format\u0026n=gyjvlPdP5mzE2jo9\u0026q=85\u0026s=86f806e0588252b17ee8094f78d5e514 2500w`})})]}),_jsx(Step,{title:`Users see the validation fail screen`,children:_jsx(_components.p,{children:`If there are one or more server-side validation errors, users see the fail screen with a button to view the errors.`})}),_jsx(Step,{title:`Users view the validation errors`,children:_jsxs(_components.p,{children:[`Clicking the `,_jsx(_components.strong,{children:`Errors`}),` button takes users to the Verify Data screen with all the server-side errors displayed.`]})}),_jsxs(Step,{title:`Users fix the errors and re-submit the data`,children:[_jsxs(_components.p,{children:[`On re-submit, the process repeats: the importer pushes the data to your API endpoint via `,_jsx(_components.code,{children:`POST`}),` requests and looks for errors in the response.`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`Each re-submit is treated as a fresh import with a new `,_jsx(_components.code,{children:`Import_Id`}),`.`]})}),_jsxs(_components.p,{children:[`To let users re-submit all the rows (instead of only the error rows), select the `,_jsx(_components.strong,{children:`All Rows`}),` option as shown below:`]}),_jsx(Frame,{caption:`Re-submit All Rows`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/csvbox-io/Fn747PbJ5U7GCAW2/images/ssv.png?fit=max\u0026auto=format\u0026n=Fn747PbJ5U7GCAW2\u0026q=85\u0026s=0814776dbe1dcf918d2e4726732d7fb8`,alt:`All Rows re-submit option`,\"data-og-width\":`652`,width:`652`,\"data-og-height\":`305`,height:`305`,\"data-path\":`images/ssv.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/csvbox-io/Fn747PbJ5U7GCAW2/images/ssv.png?w=280\u0026fit=max\u0026auto=format\u0026n=Fn747PbJ5U7GCAW2\u0026q=85\u0026s=9b720f8294c7d61fa86c151465268465 280w, https://mintcdn.com/csvbox-io/Fn747PbJ5U7GCAW2/images/ssv.png?w=560\u0026fit=max\u0026auto=format\u0026n=Fn747PbJ5U7GCAW2\u0026q=85\u0026s=4e80e82f90e6a121dcedc78c022f46da 560w, https://mintcdn.com/csvbox-io/Fn747PbJ5U7GCAW2/images/ssv.png?w=840\u0026fit=max\u0026auto=format\u0026n=Fn747PbJ5U7GCAW2\u0026q=85\u0026s=e7c071d682911cafcd50d13aa96c6535 840w, https://mintcdn.com/csvbox-io/Fn747PbJ5U7GCAW2/images/ssv.png?w=1100\u0026fit=max\u0026auto=format\u0026n=Fn747PbJ5U7GCAW2\u0026q=85\u0026s=bea353e0f3c3581790cd6e1d45550898 1100w, https://mintcdn.com/csvbox-io/Fn747PbJ5U7GCAW2/images/ssv.png?w=1650\u0026fit=max\u0026auto=format\u0026n=Fn747PbJ5U7GCAW2\u0026q=85\u0026s=7fd98bbbffba1da0f6d90713b467555f 1650w, https://mintcdn.com/csvbox-io/Fn747PbJ5U7GCAW2/images/ssv.png?w=2500\u0026fit=max\u0026auto=format\u0026n=Fn747PbJ5U7GCAW2\u0026q=85\u0026s=747d4dc7af3a1a18e0d6d40d5ad2f0cf 2500w`})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`error-types`,children:`Error types`}),`\n`,_jsx(_components.p,{children:`CSVbox server-side validation supports the following error types:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`table`}),`: Shows high-level or common errors that apply to the entire upload. Renders as a dismissible alert above the grid.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`row`}),`: Shows errors that apply to a whole row, not a specific cell. Renders as a red badge on the row number; clicking it opens a pop-up with the message.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`column`}),`: Shows validation errors that apply to an entire column. Use these when the issue is with the column itself rather than with any individual row or cell.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`cell`}),`: The previous behavior; highlights an individual cell with an inline message. This documentation refers to these as “cell errors.”`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`ui-behavior`,children:`UI behavior`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Table errors`}),` appear in a prominent alert banner above the grid until dismissed or replaced by a subsequent validation run.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Row errors`}),` highlight the row index with a red badge. Clicking the badge opens a pop-over containing your `,_jsx(_components.code,{children:`message`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Column errors`}),` highlight the column name with a red badge. Clicking the badge opens a pop-over containing your `,_jsx(_components.code,{children:`message`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Cell errors`}),` continue to highlight individual cells with inline messages as before.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`when-to-use-each-type`,children:`When to use each type`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`table`}),`: Missing required columns, inconsistent file format, duplicate file, or any condition that makes the whole dataset invalid.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`row`}),`: Cross-field checks within the same row (for example, “End Date must be after Start Date”), referential issues that aren’t tied to a single column, or row-level business rules.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`column`}),`: Issues that apply to a full column rather than to one cell or row (for example, an invalid column name, or a required column with an incorrect format or configuration).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`cell`}),`: Format, length, or pattern errors, disallowed values, or any validation that is clearly attributable to one column.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`response-format-json`,children:`Response format JSON`}),`\n`,_jsx(_components.p,{children:`CSVbox expects the validation endpoint to return an array of error objects.`}),`\n`,_jsx(Heading,{level:`3`,id:`fields`,children:`Fields`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Parameter`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`type`})}),_jsx(_components.td,{children:`string`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`\"table\"`}),`, `,_jsx(_components.code,{children:`\"row\"`}),`, `,_jsx(_components.code,{children:`\"column\"`}),`, or `,_jsx(_components.code,{children:`\"cell\"`}),`. Defaults to `,_jsx(_components.code,{children:`\"cell\"`}),`. (Optional)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`row_id`})}),_jsx(_components.td,{children:`integer`}),_jsxs(_components.td,{children:[`The row number of the error. Starts with 1. (Required for `,_jsx(_components.code,{children:`row`}),` and `,_jsx(_components.code,{children:`cell`}),`)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`column`})}),_jsx(_components.td,{children:`string`}),_jsxs(_components.td,{children:[`The CSVbox `,_jsx(_components.a,{href:`/sheet-settings/columns#column-name`,children:`column name`}),` (the field you mapped), not the user’s original header. It is case-sensitive. (Required for `,_jsx(_components.code,{children:`column`}),` and `,_jsx(_components.code,{children:`cell`}),`)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`message`})}),_jsx(_components.td,{children:`string`}),_jsxs(_components.td,{children:[`String to display to the user. Basic HTML line breaks like `,_jsx(_components.code,{children:`\u003cbr>`}),` are supported.`]})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`example-payload`,children:`Example payload`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`32`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`32`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`[`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"type\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"table\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"Missing address.\u003cbr>Missing department.\u003cbr>Resubmit.\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"type\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"cell\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"row_id\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"column\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"employee_id\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"Invalid Emp ID\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"row_id\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`2`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"column\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"dept\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"Department does not exist\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"row_id\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`3`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"column\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"employee_name\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"Employee's name has changed\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"type\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"row\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"row_id\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`3`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"Cannot add this row\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"type\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"column\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"column\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"employee_id\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"Invalid column name\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`]`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`You can mix `,_jsx(_components.strong,{children:`table`}),`, `,_jsx(_components.strong,{children:`row`}),`, `,_jsx(_components.strong,{children:`column`}),`, and `,_jsx(_components.strong,{children:`cell`}),` errors in the same response.`]}),`\n`,_jsx(Heading,{level:`2`,id:`additional-attributes-in-the-client-data-object`,children:`Additional attributes in the client data object`}),`\n`,_jsxs(_components.p,{children:[`When `,_jsx(_components.strong,{children:`Server-Side Validation (SSV)`}),` is enabled, the data object received at the client (after submission) includes additional attributes that help you handle validation states programmatically.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Attribute`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ssv_enabled`})}),_jsx(_components.td,{children:`Indicates whether Server-Side Validation is active for the current sheet.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ssv_fail`})}),_jsxs(_components.td,{children:[`Set to `,_jsx(_components.strong,{children:`true`}),` only when the server returns a `,_jsx(_components.strong,{children:`211 response code`}),`, meaning the import failed due to SSV errors.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ssv_row_fail`})}),_jsx(_components.td,{children:`Number of rows that failed during server-side validation.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ssv_table_error`})}),_jsx(_components.td,{children:`True if a table-level validation error was returned by the server.`})]})]})]}),`\n`,_jsx(_components.p,{children:`Use these attributes to detect and respond to validation outcomes directly from your client application, for example by displaying custom messages, logging failed rows, or triggering retry logic.`}),`\n`,_jsx(Heading,{level:`3`,id:`example-response-object`,children:`Example response object`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`20`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`20`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#F44747`,\"--shiki-dark\":`#F44747`},children:` destination_type`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"apiwebhook\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#F44747`,\"--shiki-dark\":`#F44747`},children:` env_name`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"default\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#F44747`,\"--shiki-dark\":`#F44747`},children:` import_description`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#F44747`,\"--shiki-dark\":`#F44747`},children:` import_endtime`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`1762774689`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#F44747`,\"--shiki-dark\":`#F44747`},children:` import_id`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`12859532`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#F44747`,\"--shiki-dark\":`#F44747`},children:` import_starttime`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`1762774686`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#F44747`,\"--shiki-dark\":`#F44747`},children:` import_status`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"success\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#F44747`,\"--shiki-dark\":`#F44747`},children:` original_filename`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"emp.csv\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#F44747`,\"--shiki-dark\":`#F44747`},children:` raw_file`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"https://app.csvbox.io/download-rawfile/1-FIIeyMflK9OvAX1EMjncCTlMasuG5Vil35LQNHAQ\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#F44747`,\"--shiki-dark\":`#F44747`},children:` row_count`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`5`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#F44747`,\"--shiki-dark\":`#F44747`},children:` row_fail`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#F44747`,\"--shiki-dark\":`#F44747`},children:` row_success`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`5`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#F44747`,\"--shiki-dark\":`#F44747`},children:` sheet_id`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`1058`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#F44747`,\"--shiki-dark\":`#F44747`},children:` sheet_name`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"Customer onboarding\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#F44747`,\"--shiki-dark\":`#F44747`},children:` ssv_enabled`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#F44747`,\"--shiki-dark\":`#F44747`},children:` ssv_fail`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#F44747`,\"--shiki-dark\":`#F44747`},children:` ssv_row_fail`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`3`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#F44747`,\"--shiki-dark\":`#F44747`},children:` ssv_table_error`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`1`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`In this example:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`ssv_enabled`}),` confirms that SSV is active.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`ssv_fail`}),` is `,_jsx(_components.code,{children:`true`}),` because the server responded with a `,_jsx(_components.strong,{children:`211`}),` code.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`ssv_row_fail`}),` specifies the number of failed rows.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`ssv_table_error`}),` is `,_jsx(_components.code,{children:`false`}),`, meaning the issue was at the row level rather than a table-level error.`]}),`\n`]})]})}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":"dark","config":{},"pageMetadata":{"title":"Server-Side Validation","description":"Validate submitted data at your server and report errors back to users for correction and re-upload.","href":"/advanced-installation/server-side-validation"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How it works","slug":"how-it-works","depth":2,"children":[]},{"title":"Error types","slug":"error-types","depth":2,"children":[{"title":"UI behavior","slug":"ui-behavior","depth":3,"children":[]},{"title":"When to use each type","slug":"when-to-use-each-type","depth":3,"children":[]}]},{"title":"Response format JSON","slug":"response-format-json","depth":2,"children":[{"title":"Fields","slug":"fields","depth":3,"children":[]},{"title":"Example payload","slug":"example-payload","depth":3,"children":[]}]},{"title":"Additional attributes in the client data object","slug":"additional-attributes-in-the-client-data-object","depth":2,"children":[{"title":"Example response object","slug":"example-response-object","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":[],"subdomain":"csvbox-io","siteName":"CSVbox Docs","title":"Server-Side Validation - CSVbox Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-15T12:46:49.356Z","originalFileLocation":"advanced-installation/server-side-validation.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";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=\"light\"}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=\"Validate submitted data at your server and report errors back to users for correction and re-upload.\">\u003cmeta data-mint-head name=\"application-name\" content=\"CSVbox 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/csvbox-io/bl8fwLPU1An19g_C/_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/csvbox-io/bl8fwLPU1An19g_C/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/csvbox-io/bl8fwLPU1An19g_C/_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/csvbox-io/bl8fwLPU1An19g_C/_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/csvbox-io/bl8fwLPU1An19g_C/_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/csvbox-io/bl8fwLPU1An19g_C/_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/csvbox-io/bl8fwLPU1An19g_C/_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/csvbox-io/bl8fwLPU1An19g_C/_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/csvbox-io/bl8fwLPU1An19g_C/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Server-Side Validation - CSVbox Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Validate submitted data at your server and report errors back to users for correction and re-upload.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"CSVbox Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://help.csvbox.io/advanced-installation/server-side-validation\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://csvbox.io/og/default.png\">\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=\"Server-Side Validation - CSVbox Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Validate submitted data at your server and report errors back to users for correction and re-upload.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://csvbox.io/og/default.png\">\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/csvbox-io/bl8fwLPU1An19g_C/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"CSVbox Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#007BFF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://help.csvbox.io/advanced-installation/server-side-validation\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/advanced-installation/server-side-validation.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://help.csvbox.io/#organization\",\"name\":\"CSVbox Docs\",\"url\":\"https://help.csvbox.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/csvbox-io/VaNqBS2QJ21PoHnw/images/1200_square.png?fit=max\u0026auto=format\u0026n=VaNqBS2QJ21PoHnw\u0026q=85\u0026s=561607ac3a031918fe0739aab943dccf\"}},{\"@type\":\"WebSite\",\"@id\":\"https://help.csvbox.io#website\",\"name\":\"CSVbox Docs\",\"url\":\"https://help.csvbox.io\",\"publisher\":{\"@id\":\"https://help.csvbox.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://help.csvbox.io/advanced-installation/server-side-validation#webpage\",\"url\":\"https://help.csvbox.io/advanced-installation/server-side-validation\",\"name\":\"Server-Side Validation\",\"description\":\"Validate submitted data at your server and report errors back to users for correction and re-upload.\",\"dateModified\":\"2026-10-15T12:46:49.356Z\",\"isPartOf\":{\"@id\":\"https://help.csvbox.io#website\"},\"breadcrumb\":{\"@id\":\"https://help.csvbox.io/advanced-installation/server-side-validation#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://help.csvbox.io/advanced-installation/server-side-validation#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Advanced Installation\",\"item\":\"https://help.csvbox.io/advanced-installation\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Server-Side Validation\",\"item\":\"https://help.csvbox.io/advanced-installation/server-side-validation\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://help.csvbox.io/advanced-installation/server-side-validation#article\",\"headline\":\"Server-Side Validation\",\"name\":\"Server-Side Validation\",\"description\":\"Validate submitted data at your server and report errors back to users for correction and re-upload.\",\"url\":\"https://help.csvbox.io/advanced-installation/server-side-validation\",\"mainEntityOfPage\":{\"@id\":\"https://help.csvbox.io/advanced-installation/server-side-validation#webpage\"},\"image\":\"https://csvbox.io/og/default.png\",\"dateModified\":\"2026-10-15T12:46:49.356Z\",\"publisher\":{\"@id\":\"https://help.csvbox.io/#organization\"},\"isPartOf\":{\"@id\":\"https://help.csvbox.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"CSVbox Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"CSVbox Docs","nav":{"global":null,"pages":[{"title":"Help Center","sidebarTitle":"Home","icon":"house","href":"/index"},{"group":"Getting Started","icon":"rocket","expanded":true,"pages":[{"title":"Getting Started","sidebarTitle":"Overview","href":"/getting-started"},{"title":"Add a Template","href":"/getting-started/1-add-template"},{"title":"Install the Code","href":"/getting-started/2-install-code"},{"title":"Receive Data","href":"/getting-started/3-receive-data"}]},{"group":"Dashboard Settings","icon":"sliders","pages":[{"title":"Dashboard Settings","sidebarTitle":"Overview","href":"/dashboard-settings"},{"title":"Sheet Options","href":"/dashboard-settings/sheet-options-1"},{"title":"Bulk Add Columns","href":"/dashboard-settings/add-columns-via-csv"},{"title":"Validations","href":"/dashboard-settings/validations"},{"title":"Smart Date and Number Formats","sidebarTitle":"Date \u0026 Number Formats","href":"/dashboard-settings/smart-date-and-number-formats"},{"title":"Sheet Tags","href":"/dashboard-settings/sheet-tags"},{"title":"Import Analytics","href":"/dashboard-settings/import-analytics"},{"title":"Split Large CSV","href":"/dashboard-settings/split-large-csv"},{"group":"AI Features","pages":[{"title":"AI Pre-Import Transform","href":"/dashboard-settings/ai-pre-import-transform"},{"title":"AI Bulk Transforms","href":"/dashboard-settings/ai-bulk-transforms"},{"title":"AI Function Generator","href":"/dashboard-settings/ai-function-generator"},{"title":"AI Document Import","sidebarTitle":"AI Document Import","href":"/dashboard-settings/ai-document-import"},{"title":"Document Metadata Fields","href":"/dashboard-settings/ai-document-import/document-metadata-fields"}]}]},{"group":"Sheet Settings","icon":"table-list","pages":[{"title":"Columns","href":"/sheet-settings/columns"},{"group":"Import Steps","pages":[{"title":"File Upload","href":"/sheet-settings/import-steps/file-upload"},{"title":"Select Header","href":"/sheet-settings/import-steps/select-header"},{"title":"Map Columns","href":"/sheet-settings/import-steps/map-columns"},{"title":"Verify Data","href":"/sheet-settings/import-steps/verify-data"},{"title":"Results","href":"/sheet-settings/import-steps/results"}]},{"title":"Display","href":"/sheet-settings/display"},{"title":"Security","href":"/sheet-settings/security"},{"title":"Code Snippet","href":"/sheet-settings/code-snippet"},{"title":"Sheet import \u0026 export","href":"/sheet-settings/sheet-import-export"},{"title":"Data Transforms","href":"/sheet-settings/data-transforms"},{"title":"Validation Functions","href":"/sheet-settings/validation-functions"},{"title":"Virtual Columns","href":"/sheet-settings/virtual-columns"}]},{"group":"Advanced Installation","icon":"code","pages":[{"title":"Advanced Installation","sidebarTitle":"Overview","href":"/advanced-installation"},{"group":"Columns","pages":[{"title":"Dynamic Columns","description":"Add new columns to the sheet at run time through the installation code.","sidebarTitle":"Dynamic Columns","href":"/advanced-installation/dynamic-columns"}]},{"group":"Validation \u0026 Transforms","pages":[{"title":"Server-Side Validation","href":"/advanced-installation/server-side-validation"},{"title":"If/Else Builder","description":"Add conditional validations and data transforms to a sheet without writing JavaScript.","href":"/advanced-installation/if-else-builder"}]},{"group":"APIs \u0026 Integrations","pages":[{"title":"REST File API","href":"/advanced-installation/rest-file-api"},{"title":"Auth API","href":"/advanced-installation/auth-api"},{"group":"Sheet API","pages":[{"title":"Sheet API","sidebarTitle":"Overview","href":"/advanced-installation/sheet-api"},{"title":"List sheets","openapi":"GET /1.1/sheet","href":"/advanced-installation/sheet-api/list-sheets"},{"title":"Get a sheet","openapi":"GET /1.1/sheet/{sheet_license_key}","href":"/advanced-installation/sheet-api/get-sheet"},{"title":"Create a sheet","openapi":"POST /1.1/sheet","href":"/advanced-installation/sheet-api/create-sheet"},{"title":"Replace a sheet","openapi":"PUT /1.1/sheet/{sheet_license_key}","href":"/advanced-installation/sheet-api/replace-sheet"},{"title":"Update a sheet","openapi":"PATCH /1.1/sheet/{sheet_license_key}","href":"/advanced-installation/sheet-api/update-sheet"}]},{"title":"CSVbox MCP Server","sidebarTitle":"MCP Server","href":"/advanced-installation/mcp-server"}]},{"group":"Configuration","pages":[{"title":"Import Links","href":"/advanced-installation/import-links"},{"title":"Environment Variables","href":"/advanced-installation/environment-variables"}]}]},{"group":"Data Destinations","icon":"database","pages":[{"title":"Data Destinations","sidebarTitle":"Overview","href":"/destinations"},{"title":"None","href":"/destinations/none"},{"title":"Test API","href":"/destinations/test-api"},{"title":"API / Webhook","sidebarTitle":"API / Webhook","href":"/destinations/api-webhook"},{"title":"Google Cloud Storage","href":"/destinations/google-cloud-storage"},{"title":"Amazon S3","href":"/destinations/amazon-s3"},{"title":"FTP Server","href":"/destinations/ftp-server"},{"title":"MySQL","href":"/destinations/mysql"},{"title":"PostgreSQL","href":"/destinations/postgresql"},{"title":"SQL Server","href":"/destinations/sql-server"},{"title":"MongoDB","href":"/destinations/mongodb"},{"title":"Google Sheets","href":"/destinations/google-sheets"},{"title":"Airtable","href":"/destinations/airtable"},{"title":"Bubble","href":"/destinations/bubble-io"},{"title":"Notion","href":"/destinations/notion"},{"title":"Zapier","href":"/destinations/zapier"},{"title":"Webflow","href":"/destinations/webflow"},{"title":"Hasura","href":"/destinations/hasura"},{"title":"Softr","href":"/destinations/softr"},{"title":"Google BigQuery","href":"/destinations/google-bigquery"},{"title":"Supabase","href":"/destinations/supabase"},{"title":"Neon","href":"/destinations/neon"},{"title":"Xano","href":"/destinations/xano"},{"title":"Xero","href":"/destinations/xero"},{"title":"OpenAPI","href":"/destinations/openapi"},{"title":"n8n","href":"/destinations/n8n"},{"title":"Pipedream","href":"/destinations/pipedream"},{"title":"Automation Platforms","sidebarTitle":"Other Platforms","href":"/destinations/automation-platforms"},{"title":"Private Mode","href":"/destinations/private-mode"}]},{"group":"Account","icon":"user","pages":[{"title":"Account","sidebarTitle":"Overview","href":"/account"},{"title":"Teams","href":"/account/teams"}]},{"group":"Resources","icon":"book","pages":[{"title":"Performance Benchmarks","href":"/performance-benchmarks"},{"title":"Changelog","href":"/change-log"}]},{"group":"Legal","icon":"scale-balanced","pages":[{"title":"Privacy Policy","href":"/legal/privacy"},{"title":"Terms of Use","href":"/legal/terms"},{"title":"Cookie Policy","href":"/legal/cookie-policy"},{"title":"User Data Policy","href":"/legal/data-policy"},{"group":"GDPR","pages":[{"title":"GDPR","sidebarTitle":"Overview","href":"/legal/gdpr"},{"title":"Data Processing Addendum","href":"/legal/gdpr/data-processing-addendum"}]},{"title":"SOC 2 Type 2","href":"/legal/soc-2-type-2"}]}]},"basePath":"","title":"Server-Side Validation - CSVbox Docs","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-DXXFP6nH.js","DynamicMarkdown-B54_zNBF.js","zoom-image-lightbox-BG6oD64b.js","lightbox-handle-r17bVUz3.js"]}