[{"data":1,"prerenderedAt":463},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-json-schema-validation":244,"-getting-started-json-schema-validation-surround":458},[4,51,78,229],{"title":5,"icon":6,"modifiedAt":7,"path":8,"stem":9,"children":10,"page":6},"Getting Started",false,"2026-04-30T19:15:33.000Z","\u002Fgetting-started","1.getting-started",[11,16,21,26,31,36,41,46],{"title":12,"path":13,"stem":14,"icon":15},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F1.quickstart","i-lucide-fast-forward",{"title":17,"path":18,"stem":19,"icon":20},"Core Concepts","\u002Fgetting-started\u002Fcore-concepts","1.getting-started\u002F2.core-concepts","i-lucide-workflow",{"title":22,"path":23,"stem":24,"icon":25},"Configs Anatomy","\u002Fgetting-started\u002Fconfigs","1.getting-started\u002F3.configs","i-lucide-file-cog",{"title":27,"path":28,"stem":29,"icon":30},"Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F4.architecture","i-lucide-layers",{"title":32,"path":33,"stem":34,"icon":35},"JSON Schema Validation","\u002Fgetting-started\u002Fjson-schema-validation","1.getting-started\u002F5.json-schema-validation","i-lucide-braces",{"title":37,"path":38,"stem":39,"icon":40},"Testing Rules","\u002Fgetting-started\u002Ftesting-targeting-rules","1.getting-started\u002F6.testing-targeting-rules","i-lucide-flask-conical",{"title":42,"path":43,"stem":44,"icon":45},"Segments","\u002Fgetting-started\u002Fsegments","1.getting-started\u002F7.segments","i-lucide-squares-intersect",{"title":47,"path":48,"stem":49,"icon":50},"Pricing & Billing","\u002Fgetting-started\u002Fpricing-and-billing","1.getting-started\u002F8.pricing-and-billing","i-lucide-credit-card",{"title":52,"modifiedAt":53,"defaultOpen":54,"path":55,"stem":56,"children":57,"page":6},"Monitoring","2026-09-24T23:33:20.000Z",true,"\u002Fmonitoring","2.monitoring",[58,63,68,73],{"title":59,"path":60,"stem":61,"icon":62},"Activity","\u002Fmonitoring\u002Factivity","2.monitoring\u002F1.activity","i-lucide-activity",{"title":64,"path":65,"stem":66,"icon":67},"Lifecycle","\u002Fmonitoring\u002Flifecycle","2.monitoring\u002F2.lifecycle","i-lucide-recycle",{"title":69,"path":70,"stem":71,"icon":72},"Alerts","\u002Fmonitoring\u002Falerts","2.monitoring\u002F3.alerts","i-lucide-bell",{"title":74,"path":75,"stem":76,"icon":77},"Dynamic Detection","\u002Fmonitoring\u002Fdynamic-detection","2.monitoring\u002F4.dynamic-detection","i-lucide-hat-glasses",{"title":79,"modifiedAt":53,"defaultOpen":54,"path":80,"stem":81,"children":82,"page":6},"SDKs","\u002Fsdks","3.sdks",[83,88,109,134,150,181,224],{"title":84,"path":85,"stem":86,"icon":87},"Available SDKs","\u002Fsdks\u002Favailable-sdks","3.sdks\u002F1.available-sdks","i-lucide-list",{"title":89,"modifiedAt":53,"icon":90,"defaultOpen":6,"path":91,"stem":92,"children":93,"page":6},"Browser SDKs","i-lucide-monitor","\u002Fsdks\u002Fbrowser","3.sdks\u002F2.browser",[94,99,104],{"title":95,"path":96,"stem":97,"icon":98},"Javascript","\u002Fsdks\u002Fbrowser\u002Fjavascript","3.sdks\u002F2.browser\u002F1.javascript","cd-logos-javascript",{"title":100,"path":101,"stem":102,"icon":103},"React","\u002Fsdks\u002Fbrowser\u002Freact","3.sdks\u002F2.browser\u002F2.react","cd-logos-react-light",{"title":105,"path":106,"stem":107,"icon":108},"Vue","\u002Fsdks\u002Fbrowser\u002Fvue","3.sdks\u002F2.browser\u002F3.vue","cd-logos-vue",{"title":110,"modifiedAt":53,"icon":111,"defaultOpen":6,"path":112,"stem":113,"children":114,"page":6},"Mobile SDKs","i-lucide-smartphone","\u002Fsdks\u002Fmobile","3.sdks\u002F3.mobile",[115,119,124,129],{"title":116,"path":117,"stem":118,"icon":103},"React Native","\u002Fsdks\u002Fmobile\u002Freact-native","3.sdks\u002F3.mobile\u002F1.react-native",{"title":120,"path":121,"stem":122,"icon":123},"Flutter","\u002Fsdks\u002Fmobile\u002Fflutter","3.sdks\u002F3.mobile\u002F2.flutter","cd-logos-flutter",{"title":125,"path":126,"stem":127,"icon":128},"Swift","\u002Fsdks\u002Fmobile\u002Fswift","3.sdks\u002F3.mobile\u002F3.swift","cd-logos-swift",{"title":130,"path":131,"stem":132,"icon":133},"Android","\u002Fsdks\u002Fmobile\u002Fandroid","3.sdks\u002F3.mobile\u002F4.android","cd-logos-android",{"title":135,"modifiedAt":53,"icon":136,"defaultOpen":6,"path":137,"stem":138,"children":139,"page":6},"Meta-framework SDKs","i-lucide-monitor-smartphone","\u002Fsdks\u002Fmeta","3.sdks\u002F4.meta",[140,145],{"title":141,"path":142,"stem":143,"icon":144},"Next.js","\u002Fsdks\u002Fmeta\u002Fnextjs","3.sdks\u002F4.meta\u002F1.nextjs","cd-logos-nextjs",{"title":146,"path":147,"stem":148,"icon":149},"Nuxt","\u002Fsdks\u002Fmeta\u002Fnuxt","3.sdks\u002F4.meta\u002F2.nuxt","cd-logos-nuxt",{"title":151,"modifiedAt":53,"icon":152,"defaultOpen":6,"path":153,"stem":154,"children":155,"page":6},"Server SDKs","i-lucide-server","\u002Fsdks\u002Fserver","3.sdks\u002F5.server",[156,161,166,171,176],{"title":157,"path":158,"stem":159,"icon":160},"Node.js","\u002Fsdks\u002Fserver\u002Fnode-js","3.sdks\u002F5.server\u002F1.node-js","cd-logos-nodejs",{"title":162,"path":163,"stem":164,"icon":165},"Python","\u002Fsdks\u002Fserver\u002Fpython","3.sdks\u002F5.server\u002F2.python","cd-logos-python",{"title":167,"path":168,"stem":169,"icon":170},"Java","\u002Fsdks\u002Fserver\u002Fjava","3.sdks\u002F5.server\u002F3.java","cd-logos-java",{"title":172,"path":173,"stem":174,"icon":175},".NET","\u002Fsdks\u002Fserver\u002Fdotnet","3.sdks\u002F5.server\u002F4.dotnet","cd-logos-dotnet",{"title":177,"path":178,"stem":179,"icon":180},"Go","\u002Fsdks\u002Fserver\u002Fgo","3.sdks\u002F5.server\u002F5.go","cd-logos-go",{"title":182,"modifiedAt":53,"icon":183,"defaultOpen":6,"path":184,"stem":185,"children":186,"page":6},"OpenFeature Providers","cd-logos-openfeature","\u002Fsdks\u002Fopenfeature","3.sdks\u002F6.openfeature",[187,192,196,200,204,208,212,216,220],{"title":188,"path":189,"stem":190,"icon":183,"icons":191},"Web","\u002Fsdks\u002Fopenfeature\u002Fweb","3.sdks\u002F6.openfeature\u002F1.web",[183,98],{"title":125,"path":193,"stem":194,"icon":183,"icons":195},"\u002Fsdks\u002Fopenfeature\u002Fswift","3.sdks\u002F6.openfeature\u002F2.swift",[183,128],{"title":130,"path":197,"stem":198,"icon":183,"icons":199},"\u002Fsdks\u002Fopenfeature\u002Fandroid","3.sdks\u002F6.openfeature\u002F3.android",[183,133],{"title":120,"path":201,"stem":202,"icon":183,"icons":203},"\u002Fsdks\u002Fopenfeature\u002Fflutter","3.sdks\u002F6.openfeature\u002F4.flutter",[183,123],{"title":157,"path":205,"stem":206,"icon":183,"icons":207},"\u002Fsdks\u002Fopenfeature\u002Fnode-js","3.sdks\u002F6.openfeature\u002F5.node-js",[183,160],{"title":162,"path":209,"stem":210,"icon":183,"icons":211},"\u002Fsdks\u002Fopenfeature\u002Fpython","3.sdks\u002F6.openfeature\u002F6.python",[183,165],{"title":167,"path":213,"stem":214,"icon":183,"icons":215},"\u002Fsdks\u002Fopenfeature\u002Fjava","3.sdks\u002F6.openfeature\u002F7.java",[183,170],{"title":172,"path":217,"stem":218,"icon":183,"icons":219},"\u002Fsdks\u002Fopenfeature\u002Fdotnet","3.sdks\u002F6.openfeature\u002F8.dotnet",[183,175],{"title":177,"path":221,"stem":222,"icon":183,"icons":223},"\u002Fsdks\u002Fopenfeature\u002Fgo","3.sdks\u002F6.openfeature\u002F9.go",[183,180],{"title":225,"path":226,"stem":227,"icon":228},"Maven Repository","\u002Fsdks\u002Fmaven-repository","3.sdks\u002F7.maven-repository","i-lucide-package",{"title":230,"modifiedAt":53,"defaultOpen":54,"path":231,"stem":232,"children":233,"page":6},"Integrations","\u002Fintegrations","4.integrations",[234,239],{"title":235,"path":236,"stem":237,"icon":238},"Terraform","\u002Fintegrations\u002Fterraform","4.integrations\u002F1.terraform","cd-logos-terraform",{"title":240,"path":241,"stem":242,"icon":243},"MCP","\u002Fintegrations\u002Fmcp","4.integrations\u002F2.mcp","cd-logos-mcp",{"id":245,"title":32,"body":246,"description":450,"extension":451,"links":452,"meta":453,"navigation":455,"path":33,"seo":456,"stem":34,"__hash__":457},"docs\u002F1.getting-started\u002F5.json-schema-validation.md",{"type":247,"value":248,"toc":442},"minimark",[249,257,260,265,278,282,293,297,300,390,394,397,435],[250,251,252,256],"p",{},[253,254,255],"code",{},"JSON"," configs can be configured with a JSON Schema. When a schema is set, every value the config can return is validated against the schema before it is saved, so a value that does not pass validation never reaches your applications. This applies to targeting rules values (including the default rule), and experiment variations, whether they are changed from the dashboard, the Admin API, or Terraform.",[250,258,259],{},"JSON Schema Validation is available on Free and Pay as you go.",[261,262,264],"h2",{"id":263},"when-values-are-validated","When values are validated",[266,267,268,272,275],"ul",{},[269,270,271],"li",{},"When you add or update the schema, every existing value in every environment is validated against the new schema. The update is rejected if any environment holds a value that no longer validates.",[269,273,274],{},"When you save targeting rules for an environment, every rule value is validated against the schema.",[269,276,277],{},"When you update the variations of a JSON experiment, every variation is validated against the schema.",[261,279,281],{"id":280},"schema-support","Schema support",[250,283,284,285,288,289,292],{},"Schemas are validated as JSON Schema draft-07. Regular expressions in ",[253,286,287],{},"pattern"," and ",[253,290,291],{},"patternProperties"," are analyzed before the schema is accepted, and a pattern that can take exponential time to match, known as catastrophic backtracking, is rejected. If you received that error when saving a JSON Schema, rewrite the regular expression patterns with bounded repetition instead of nested quantifiers.",[261,294,296],{"id":295},"limits","Limits",[250,298,299],{},"These limits apply to both pricing options.",[301,302,303,316],"table",{},[304,305,306],"thead",{},[307,308,309,313],"tr",{},[310,311,312],"th",{},"Limit",[310,314,315],{},"Value",[317,318,319,328,336,344,355,363,371],"tbody",{},[307,320,321,325],{},[322,323,324],"td",{},"Schema size",[322,326,327],{},"32 KB",[307,329,330,333],{},[322,331,332],{},"JSON value size",[322,334,335],{},"16 KB",[307,337,338,341],{},[322,339,340],{},"Nesting depth of a schema",[322,342,343],{},"50 levels",[307,345,346,352],{},[322,347,348,349],{},"Items in an ",[253,350,351],{},"enum",[322,353,354],{},"1,000",[307,356,357,360],{},[322,358,359],{},"Regular expression patterns per schema",[322,361,362],{},"32",[307,364,365,368],{},[322,366,367],{},"Length of any given regex pattern",[322,369,370],{},"512 characters",[307,372,373,387],{},[322,374,375,376,379,380,383,384],{},"Branches across ",[253,377,378],{},"anyOf",", ",[253,381,382],{},"oneOf",", and ",[253,385,386],{},"allOf",[322,388,389],{},"100",[261,391,393],{"id":392},"hourly-budgets-on-free","Hourly budgets on Free",[250,395,396],{},"Validating the provided schema itself, and validating JSON against a schema are two of the most resource intensive operations we run. In order to protect our systems from abuse, the Free option has a fair-use budget per organization, which resets every hour:",[301,398,399,412],{},[304,400,401],{},[307,402,403,406,409],{},[310,404,405],{},"Operation",[310,407,408],{},"Free",[310,410,411],{},"Pay as you go",[317,413,414,425],{},[307,415,416,419,422],{},[322,417,418],{},"Schema updates per hour",[322,420,421],{},"20",[322,423,424],{},"No limit",[307,426,427,430,433],{},[322,428,429],{},"JSON value validations per hour",[322,431,432],{},"300",[322,434,424],{},[250,436,437,438,441],{},"A schema updates is any save that adds, edits, or removes a schema. A value validation is any save of targeting rules or experiment variations for a config that has a JSON schema. When the budget is used up, the update is rejected with an error that says when the budget resets. The Admin API responds with HTTP status ",[253,439,440],{},"429",", and av error message in the response body.",{"title":443,"searchDepth":444,"depth":444,"links":445},"",2,[446,447,448,449],{"id":263,"depth":444,"text":264},{"id":280,"depth":444,"text":281},{"id":295,"depth":444,"text":296},{"id":392,"depth":444,"text":393},"Validate JSON config values against a schema, and the limits that apply","md",null,{"modifiedAt":454},"2026-10-01T21:44:14.000Z",{"icon":35},{"title":32,"description":450},"w0sZeAcP3bZu1LQOeK1RVsXuuLj-q8PmF0uFb4sK4FM",[459,461],{"title":27,"path":28,"stem":29,"description":460,"icon":30,"children":-1},"How ConfigDirector delivers config values and updates",{"title":37,"path":38,"stem":39,"description":462,"icon":40,"children":-1},"See which value a context would receive from the targeting rules you are editing, and why, before you save",1791783863394]