[{"data":1,"prerenderedAt":2237},["ShallowReactive",2],{"navigation_docs":3,"-integrations-admin-api":271,"-integrations-admin-api-surround":2232},[4,10,57,83,236,256],{"title":5,"path":6,"stem":7,"icon":8,"exact":9},"Introduction","\u002F","0.index","i-lucide-book-open",true,{"title":11,"icon":12,"modifiedAt":13,"path":14,"stem":15,"children":16,"page":12},"Getting Started",false,"2026-04-30T19:15:33.000Z","\u002Fgetting-started","1.getting-started",[17,22,27,32,37,42,47,52],{"title":18,"path":19,"stem":20,"icon":21},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F1.quickstart","i-lucide-fast-forward",{"title":23,"path":24,"stem":25,"icon":26},"Core Concepts","\u002Fgetting-started\u002Fcore-concepts","1.getting-started\u002F2.core-concepts","i-lucide-workflow",{"title":28,"path":29,"stem":30,"icon":31},"Configs Anatomy","\u002Fgetting-started\u002Fconfigs","1.getting-started\u002F3.configs","i-lucide-file-cog",{"title":33,"path":34,"stem":35,"icon":36},"Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F4.architecture","i-lucide-layers",{"title":38,"path":39,"stem":40,"icon":41},"JSON Schema Validation","\u002Fgetting-started\u002Fjson-schema-validation","1.getting-started\u002F5.json-schema-validation","i-lucide-braces",{"title":43,"path":44,"stem":45,"icon":46},"Testing Rules","\u002Fgetting-started\u002Ftesting-targeting-rules","1.getting-started\u002F6.testing-targeting-rules","i-lucide-flask-conical",{"title":48,"path":49,"stem":50,"icon":51},"Segments","\u002Fgetting-started\u002Fsegments","1.getting-started\u002F7.segments","i-lucide-squares-intersect",{"title":53,"path":54,"stem":55,"icon":56},"Pricing & Billing","\u002Fgetting-started\u002Fpricing-and-billing","1.getting-started\u002F8.pricing-and-billing","i-lucide-credit-card",{"title":58,"modifiedAt":59,"defaultOpen":9,"path":60,"stem":61,"children":62,"page":12},"Monitoring","2026-09-24T23:33:20.000Z","\u002Fmonitoring","2.monitoring",[63,68,73,78],{"title":64,"path":65,"stem":66,"icon":67},"Activity","\u002Fmonitoring\u002Factivity","2.monitoring\u002F1.activity","i-lucide-activity",{"title":69,"path":70,"stem":71,"icon":72},"Lifecycle","\u002Fmonitoring\u002Flifecycle","2.monitoring\u002F2.lifecycle","i-lucide-recycle",{"title":74,"path":75,"stem":76,"icon":77},"Alerts","\u002Fmonitoring\u002Falerts","2.monitoring\u002F3.alerts","i-lucide-bell",{"title":79,"path":80,"stem":81,"icon":82},"Dynamic Detection","\u002Fmonitoring\u002Fdynamic-detection","2.monitoring\u002F4.dynamic-detection","i-lucide-hat-glasses",{"title":84,"modifiedAt":59,"defaultOpen":9,"path":85,"stem":86,"children":87,"page":12},"SDKs","\u002Fsdks","3.sdks",[88,93,114,139,155,186,231],{"title":89,"path":90,"stem":91,"icon":92},"Available SDKs","\u002Fsdks\u002Favailable-sdks","3.sdks\u002F1.available-sdks","i-lucide-list",{"title":94,"modifiedAt":59,"icon":95,"defaultOpen":12,"path":96,"stem":97,"children":98,"page":12},"Browser SDKs","i-lucide-monitor","\u002Fsdks\u002Fbrowser","3.sdks\u002F2.browser",[99,104,109],{"title":100,"path":101,"stem":102,"icon":103},"Javascript","\u002Fsdks\u002Fbrowser\u002Fjavascript","3.sdks\u002F2.browser\u002F1.javascript","cd-logos-javascript",{"title":105,"path":106,"stem":107,"icon":108},"React","\u002Fsdks\u002Fbrowser\u002Freact","3.sdks\u002F2.browser\u002F2.react","cd-logos-react-light",{"title":110,"path":111,"stem":112,"icon":113},"Vue","\u002Fsdks\u002Fbrowser\u002Fvue","3.sdks\u002F2.browser\u002F3.vue","cd-logos-vue",{"title":115,"modifiedAt":59,"icon":116,"defaultOpen":12,"path":117,"stem":118,"children":119,"page":12},"Mobile SDKs","i-lucide-smartphone","\u002Fsdks\u002Fmobile","3.sdks\u002F3.mobile",[120,124,129,134],{"title":121,"path":122,"stem":123,"icon":108},"React Native","\u002Fsdks\u002Fmobile\u002Freact-native","3.sdks\u002F3.mobile\u002F1.react-native",{"title":125,"path":126,"stem":127,"icon":128},"Flutter","\u002Fsdks\u002Fmobile\u002Fflutter","3.sdks\u002F3.mobile\u002F2.flutter","cd-logos-flutter",{"title":130,"path":131,"stem":132,"icon":133},"Swift","\u002Fsdks\u002Fmobile\u002Fswift","3.sdks\u002F3.mobile\u002F3.swift","cd-logos-swift",{"title":135,"path":136,"stem":137,"icon":138},"Android","\u002Fsdks\u002Fmobile\u002Fandroid","3.sdks\u002F3.mobile\u002F4.android","cd-logos-android",{"title":140,"modifiedAt":59,"icon":141,"defaultOpen":12,"path":142,"stem":143,"children":144,"page":12},"Meta-framework SDKs","i-lucide-monitor-smartphone","\u002Fsdks\u002Fmeta","3.sdks\u002F4.meta",[145,150],{"title":146,"path":147,"stem":148,"icon":149},"Next.js","\u002Fsdks\u002Fmeta\u002Fnextjs","3.sdks\u002F4.meta\u002F1.nextjs","cd-logos-nextjs",{"title":151,"path":152,"stem":153,"icon":154},"Nuxt","\u002Fsdks\u002Fmeta\u002Fnuxt","3.sdks\u002F4.meta\u002F2.nuxt","cd-logos-nuxt",{"title":156,"modifiedAt":59,"icon":157,"defaultOpen":12,"path":158,"stem":159,"children":160,"page":12},"Server SDKs","i-lucide-server","\u002Fsdks\u002Fserver","3.sdks\u002F5.server",[161,166,171,176,181],{"title":162,"path":163,"stem":164,"icon":165},"Node.js","\u002Fsdks\u002Fserver\u002Fnode-js","3.sdks\u002F5.server\u002F1.node-js","cd-logos-nodejs",{"title":167,"path":168,"stem":169,"icon":170},"Python","\u002Fsdks\u002Fserver\u002Fpython","3.sdks\u002F5.server\u002F2.python","cd-logos-python",{"title":172,"path":173,"stem":174,"icon":175},"Java","\u002Fsdks\u002Fserver\u002Fjava","3.sdks\u002F5.server\u002F3.java","cd-logos-java",{"title":177,"path":178,"stem":179,"icon":180},".NET","\u002Fsdks\u002Fserver\u002Fdotnet","3.sdks\u002F5.server\u002F4.dotnet","cd-logos-dotnet",{"title":182,"path":183,"stem":184,"icon":185},"Go","\u002Fsdks\u002Fserver\u002Fgo","3.sdks\u002F5.server\u002F5.go","cd-logos-go",{"title":187,"modifiedAt":59,"icon":188,"defaultOpen":12,"path":189,"stem":190,"children":191},"OpenFeature Providers","cd-logos-openfeature","\u002Fsdks\u002Fopenfeature","3.sdks\u002F6.openfeature\u002Findex",[192,194,199,203,207,211,215,219,223,227],{"title":193,"path":189,"stem":190,"icon":188},"Overview",{"title":195,"path":196,"stem":197,"icon":188,"icons":198},"Web","\u002Fsdks\u002Fopenfeature\u002Fweb","3.sdks\u002F6.openfeature\u002F1.web",[188,103],{"title":130,"path":200,"stem":201,"icon":188,"icons":202},"\u002Fsdks\u002Fopenfeature\u002Fswift","3.sdks\u002F6.openfeature\u002F2.swift",[188,133],{"title":135,"path":204,"stem":205,"icon":188,"icons":206},"\u002Fsdks\u002Fopenfeature\u002Fandroid","3.sdks\u002F6.openfeature\u002F3.android",[188,138],{"title":125,"path":208,"stem":209,"icon":188,"icons":210},"\u002Fsdks\u002Fopenfeature\u002Fflutter","3.sdks\u002F6.openfeature\u002F4.flutter",[188,128],{"title":162,"path":212,"stem":213,"icon":188,"icons":214},"\u002Fsdks\u002Fopenfeature\u002Fnode-js","3.sdks\u002F6.openfeature\u002F5.node-js",[188,165],{"title":167,"path":216,"stem":217,"icon":188,"icons":218},"\u002Fsdks\u002Fopenfeature\u002Fpython","3.sdks\u002F6.openfeature\u002F6.python",[188,170],{"title":172,"path":220,"stem":221,"icon":188,"icons":222},"\u002Fsdks\u002Fopenfeature\u002Fjava","3.sdks\u002F6.openfeature\u002F7.java",[188,175],{"title":177,"path":224,"stem":225,"icon":188,"icons":226},"\u002Fsdks\u002Fopenfeature\u002Fdotnet","3.sdks\u002F6.openfeature\u002F8.dotnet",[188,180],{"title":182,"path":228,"stem":229,"icon":188,"icons":230},"\u002Fsdks\u002Fopenfeature\u002Fgo","3.sdks\u002F6.openfeature\u002F9.go",[188,185],{"title":232,"path":233,"stem":234,"icon":235},"Maven Repository","\u002Fsdks\u002Fmaven-repository","3.sdks\u002F7.maven-repository","i-lucide-package",{"title":237,"modifiedAt":59,"defaultOpen":9,"path":238,"stem":239,"children":240,"page":12},"Integrations","\u002Fintegrations","4.integrations",[241,246,251],{"title":242,"path":243,"stem":244,"icon":245},"Terraform","\u002Fintegrations\u002Fterraform","4.integrations\u002F1.terraform","cd-logos-terraform",{"title":247,"path":248,"stem":249,"icon":250},"MCP","\u002Fintegrations\u002Fmcp","4.integrations\u002F2.mcp","cd-logos-mcp",{"title":252,"path":253,"stem":254,"icon":255},"Admin API","\u002Fintegrations\u002Fadmin-api","4.integrations\u002F3.admin-api","i-lucide-blocks",{"title":257,"modifiedAt":258,"defaultOpen":9,"path":259,"stem":260,"children":261,"page":12},"Migration Guides","2026-10-16T17:57:49.000Z","\u002Fmigration-guides","5.migration-guides",[262,267],{"title":263,"path":264,"stem":265,"icon":266},"From LaunchDarkly","\u002Fmigration-guides\u002Flaunchdarkly","5.migration-guides\u002F1.launchdarkly","i-lucide-baggage-claim",{"title":268,"path":269,"stem":270,"icon":266},"From Firebase Remote Config","\u002Fmigration-guides\u002Ffirebase-remote-config","5.migration-guides\u002F2.firebase-remote-config",{"id":272,"title":252,"body":273,"description":2222,"extension":2223,"links":2224,"meta":2225,"navigation":2227,"path":253,"seo":2228,"stem":254,"__hash__":2231},"docs\u002F4.integrations\u002F3.admin-api.md",{"type":274,"value":275,"toc":2203},"minimark",[276,280,293,301,304,315,318,322,328,335,341,345,352,358,361,368,439,527,531,539,650,659,663,684,688,804,810,887,891,904,907,911,1035,1038,1153,1156,1364,1455,1458,1584,1587,1711,1715,1718,1759,1762,1876,1879,1889,1900,2101,2194,2199],[277,278,5],"h2",{"id":279},"introduction",[281,282,283,284,288,289,292],"p",{},"The Admin API is the HTTPS interface to everything you manage in the dashboard for a project: projects, environments, configs and their targeting rules, segments, and tags. The ",[285,286,287],"a",{"href":243},"Terraform provider"," and the ",[285,290,291],{"href":248},"MCP server"," are built on it, and anything they can do, a script of yours can do too.",[281,294,295,296,300],{},"Every request goes through the same validations as the dashboard, so a value that the dashboard would refuse is refused here with the same message. Every change shows in the audit log with a source of ",[297,298,299],"strong",{},"API"," and the name of the token that made it.",[281,302,303],{},"The API describes itself with an OpenAPI 3.1 document, which needs no authentication:",[305,306,311],"pre",{"className":307,"code":309,"language":310},[308],"language-text","https:\u002F\u002Fapi.configdirector.com\u002Fv1\u002Fopenapi.json\n","text",[312,313,309],"code",{"__ignoreMap":314},"",[281,316,317],{},"It holds the exact request and response schema of every endpoint on this page, including the targeting rule and segment condition shapes, and the base URL below as its server, so it is the file to hand to an OpenAPI client generator.",[277,319,321],{"id":320},"base-url","Base URL",[305,323,326],{"className":324,"code":325,"language":310},[308],"https:\u002F\u002Fapi.configdirector.com\u002Fv1\n",[312,327,325],{"__ignoreMap":314},[281,329,330,331,334],{},"Requests and responses are JSON. Send ",[312,332,333],{},"Content-Type: application\u002Fjson"," with every request that has a body. Projects, environments, and tags are addressed by their id, a UUID; configs and segments are addressed by their key, so a URL reads the way the dashboard does:",[305,336,339],{"className":337,"code":338,"language":310},[308],"GET https:\u002F\u002Fapi.configdirector.com\u002Fv1\u002Fprojects\u002F{projectId}\u002Fconfigs\u002Fnew-checkout\n",[312,340,338],{"__ignoreMap":314},[277,342,344],{"id":343},"authentication","Authentication",[281,346,347,348,351],{},"Create an API token in the dashboard under ",[297,349,350],{},"API tokens"," and send it as a bearer token:",[305,353,356],{"className":354,"code":355,"language":310},[308],"Authorization: Bearer YOUR-API-TOKEN\n",[312,357,355],{"__ignoreMap":314},[281,359,360],{},"A token belongs to the member who created it, and only that member can see, rename, or revoke it. When it is created, it is given a subset of the permissions below, and it never has more than its creator's role grants, even if the role changes later. A token can have an expiration date, which is recommended for tokens stored on a workstation. Keep tokens out of source control, and provide them through an environment variable or a secret store.",[281,362,363,364,367],{},"A request that is not authenticated, or that the token's permissions do not allow, is refused with ",[312,365,366],{},"403"," and a body that says why:",[305,369,373],{"className":370,"code":371,"language":372,"meta":314,"style":314},"language-json shiki shiki-themes material-theme-lighter github-light github-dark","{\n  \"error\": \"The Authorization header is missing. Send `Authorization: Bearer \u003Capi token>`.\",\n  \"code\": \"AUTHORIZATION_HEADER_MISSING\"\n}\n","json",[312,374,375,384,414,433],{"__ignoreMap":314},[376,377,380],"span",{"class":378,"line":379},"line",1,[376,381,383],{"class":382},"sP7_E","{\n",[376,385,387,391,395,398,401,405,409,411],{"class":378,"line":386},2,[376,388,390],{"class":389},"s39Yj","  \"",[376,392,394],{"class":393},"sseR_","error",[376,396,397],{"class":389},"\"",[376,399,400],{"class":382},":",[376,402,404],{"class":403},"sjJ54"," \"",[376,406,408],{"class":407},"s_sjI","The Authorization header is missing. Send `Authorization: Bearer \u003Capi token>`.",[376,410,397],{"class":403},[376,412,413],{"class":382},",\n",[376,415,417,419,421,423,425,427,430],{"class":378,"line":416},3,[376,418,390],{"class":389},[376,420,312],{"class":393},[376,422,397],{"class":389},[376,424,400],{"class":382},[376,426,404],{"class":403},[376,428,429],{"class":407},"AUTHORIZATION_HEADER_MISSING",[376,431,432],{"class":403},"\"\n",[376,434,436],{"class":378,"line":435},4,[376,437,438],{"class":382},"}\n",[440,441,442,456],"table",{},[443,444,445],"thead",{},[446,447,448,453],"tr",{},[449,450,451],"th",{},[312,452,312],{},[449,454,455],{},"Meaning",[457,458,459,473,487,497,507,517],"tbody",{},[446,460,461,466],{},[462,463,464],"td",{},[312,465,429],{},[462,467,468,469,472],{},"The request has no ",[312,470,471],{},"Authorization"," header.",[446,474,475,480],{},[462,476,477],{},[312,478,479],{},"AUTHORIZATION_HEADER_INVALID",[462,481,482,483,486],{},"The header is not of the form ",[312,484,485],{},"Bearer \u003Capi token>",".",[446,488,489,494],{},[462,490,491],{},[312,492,493],{},"API_TOKEN_NOT_FOUND",[462,495,496],{},"No token matches. It may have been revoked, or its organization disabled.",[446,498,499,504],{},[462,500,501],{},[312,502,503],{},"API_TOKEN_EXPIRED",[462,505,506],{},"The token's expiration date has passed. The message says when. Create a new token.",[446,508,509,514],{},[462,510,511],{},[312,512,513],{},"API_TOKEN_OWNER_REMOVED",[462,515,516],{},"The member who created the token no longer belongs to the organization. Create a new token.",[446,518,519,524],{},[462,520,521],{},[312,522,523],{},"INSUFFICIENT_PERMISSIONS",[462,525,526],{},"The token is valid but lacks the permission the endpoint needs. The endpoint table below names each one.",[277,528,530],{"id":529},"permissions","Permissions",[281,532,533,534,538],{},"Each endpoint needs one permission, named in the ",[285,535,537],{"href":536},"#endpoints","endpoints"," table. The permissions the Admin API uses are:",[440,540,541,550],{},[443,542,543],{},[446,544,545,548],{},[449,546,547],{},"Resource",[449,549,530],{},[457,551,552,572,591,613,631],{},[446,553,554,557],{},[462,555,556],{},"Projects",[462,558,559,562,563,562,566,562,569],{},[312,560,561],{},"projects:read",", ",[312,564,565],{},"projects:create",[312,567,568],{},"projects:update",[312,570,571],{},"projects:delete",[446,573,574,577],{},[462,575,576],{},"Environments",[462,578,579,562,582,562,585,562,588],{},[312,580,581],{},"environments:read",[312,583,584],{},"environments:create",[312,586,587],{},"environments:update",[312,589,590],{},"environments:delete",[446,592,593,596],{},[462,594,595],{},"Configs",[462,597,598,562,601,562,604,562,607,562,610],{},[312,599,600],{},"configs:read",[312,602,603],{},"configs:create",[312,605,606],{},"config-settings:update",[312,608,609],{},"config-targeting-rules:update",[312,611,612],{},"configs:archive",[446,614,615,617],{},[462,616,48],{},[462,618,619,562,622,562,625,562,628],{},[312,620,621],{},"segments:read",[312,623,624],{},"segments:create",[312,626,627],{},"segments:update",[312,629,630],{},"segments:delete",[446,632,633,636],{},[462,634,635],{},"Tags",[462,637,638,562,641,562,644,562,647],{},[312,639,640],{},"tags:read",[312,642,643],{},"tags:create",[312,645,646],{},"tags:update",[312,648,649],{},"tags:delete",[281,651,652,653,655,656,658],{},"Creating a config with tags needs ",[312,654,606],{}," as well as ",[312,657,603],{},". Members, API tokens, SDK keys, contexts, and the audit log are managed in the dashboard only.",[277,660,662],{"id":661},"terraform-opentofu-and-the-audit-log","Terraform, OpenTofu, and the audit log",[281,664,665,666,668,669,672,673,676,677,680,681,683],{},"Every change made through the API is recorded in the audit log with the source ",[297,667,299],{}," and the token's name. A client that is Terraform or OpenTofu says so with the ",[312,670,671],{},"X-SourceClient"," header, whose accepted values are ",[312,674,675],{},"terraform"," and ",[312,678,679],{},"opentofu",", so the audit log shows which one made the change. Any other value is recorded as ",[297,682,299],{},". The Terraform provider sends the header for you.",[277,685,687],{"id":686},"responses-and-errors","Responses and errors",[440,689,690,700],{},[443,691,692],{},[446,693,694,697],{},[449,695,696],{},"Status",[449,698,699],{},"When",[457,701,702,712,722,732,744,754,768,778],{},[446,703,704,709],{},[462,705,706],{},[312,707,708],{},"200",[462,710,711],{},"The request succeeded and the body holds the resource.",[446,713,714,719],{},[462,715,716],{},[312,717,718],{},"204",[462,720,721],{},"The request succeeded and there is nothing to return: updating a project or targeting rules, archiving a config, and deletions.",[446,723,724,729],{},[462,725,726],{},[312,727,728],{},"400",[462,730,731],{},"The body failed validation. The response lists each problem, with the field it concerns when there is one. A config key that is already in use in the project is reported this way too.",[446,733,734,738],{},[462,735,736],{},[312,737,366],{},[462,739,740,741,486],{},"Not authenticated, or the token lacks the permission. See ",[285,742,344],{"href":743},"#authentication",[446,745,746,751],{},[462,747,748],{},[312,749,750],{},"404",[462,752,753],{},"No resource with that id or key exists in the project or organization.",[446,755,756,761],{},[462,757,758],{},[312,759,760],{},"409",[462,762,763,764,767],{},"Deleting a segment that the targeting rules of a config still use. The body's ",[312,765,766],{},"usages"," lists each config and the environments whose rules use it.",[446,769,770,775],{},[462,771,772],{},[312,773,774],{},"413",[462,776,777],{},"The request body is larger than 4 MB.",[446,779,780,785],{},[462,781,782],{},[312,783,784],{},"429",[462,786,787,788,791,792,795,796,800,801,803],{},"Service is suspended, because a Free organization has stayed over its free allowance past the billing grace period or a Pay as you go organization has reached its spending limit. The body is ",[312,789,790],{},"{ \"error\": \"Service suspended\", \"code\": \"SERVICE_SUSPENDED\" }"," with a ",[312,793,794],{},"Retry-After"," header. A Free organization that has used up an hourly ",[285,797,799],{"href":798},"\u002Fgetting-started\u002Fjson-schema-validation#hourly-budgets-on-free","JSON Schema budget"," gets ",[312,802,784],{}," too, with a message that says when the budget resets.",[281,805,806,807,809],{},"A ",[312,808,728],{}," body:",[305,811,813],{"className":370,"code":812,"language":372,"meta":314,"style":314},"{\n  \"errors\": [\n    { \"name\": \"key\", \"message\": \"The key must be at least 4 characters long\" }\n  ]\n}\n",[312,814,815,819,833,877,882],{"__ignoreMap":314},[376,816,817],{"class":378,"line":379},[376,818,383],{"class":382},[376,820,821,823,826,828,830],{"class":378,"line":386},[376,822,390],{"class":389},[376,824,825],{"class":393},"errors",[376,827,397],{"class":389},[376,829,400],{"class":382},[376,831,832],{"class":382}," [\n",[376,834,835,838,840,844,846,848,850,853,855,858,860,863,865,867,869,872,874],{"class":378,"line":416},[376,836,837],{"class":382},"    {",[376,839,404],{"class":389},[376,841,843],{"class":842},"sZMiF","name",[376,845,397],{"class":389},[376,847,400],{"class":382},[376,849,404],{"class":403},[376,851,852],{"class":407},"key",[376,854,397],{"class":403},[376,856,857],{"class":382},",",[376,859,404],{"class":389},[376,861,862],{"class":842},"message",[376,864,397],{"class":389},[376,866,400],{"class":382},[376,868,404],{"class":403},[376,870,871],{"class":407},"The key must be at least 4 characters long",[376,873,397],{"class":403},[376,875,876],{"class":382}," }\n",[376,878,879],{"class":378,"line":435},[376,880,881],{"class":382},"  ]\n",[376,883,885],{"class":378,"line":884},5,[376,886,438],{"class":382},[277,888,890],{"id":889},"usage","Usage",[281,892,893,894,898,899,903],{},"Each request counts as one Admin API request against your organization's monthly ",[285,895,897],{"href":896},"\u002Fgetting-started\u002Fpricing-and-billing#the-free-allowance","free allowance"," of 10,000, and beyond it at the ",[285,900,902],{"href":901},"\u002Fgetting-started\u002Fpricing-and-billing#pay-as-you-go-rates","Pay as you go rates",". Terraform applies and MCP tool calls count the same way, since both go through the API. Reading the OpenAPI document is free.",[277,905,906],{"id":537},"Endpoints",[908,909,556],"h3",{"id":910},"projects",[440,912,913,929],{},[443,914,915],{},[446,916,917,920,923,926],{},[449,918,919],{},"Method",[449,921,922],{},"Path",[449,924,925],{},"What it does",[449,927,928],{},"Permission",[457,930,931,950,981,999,1017],{},[446,932,933,938,943,946],{},[462,934,935],{},[312,936,937],{},"GET",[462,939,940],{},[312,941,942],{},"\u002Fprojects",[462,944,945],{},"List the organization's projects, without their environments.",[462,947,948],{},[312,949,561],{},[446,951,952,957,961,977],{},[462,953,954],{},[312,955,956],{},"POST",[462,958,959],{},[312,960,942],{},[462,962,963,964,966,967,970,971,676,974,486],{},"Create a project from a ",[312,965,843],{}," and a ",[312,968,969],{},"slug",". Returns it with its environments, ",[312,972,973],{},"Test",[312,975,976],{},"Production",[462,978,979],{},[312,980,565],{},[446,982,983,987,992,995],{},[462,984,985],{},[312,986,937],{},[462,988,989],{},[312,990,991],{},"\u002Fprojects\u002F{projectId}",[462,993,994],{},"Get a project with its environments.",[462,996,997],{},[312,998,561],{},[446,1000,1001,1006,1010,1013],{},[462,1002,1003],{},[312,1004,1005],{},"PUT",[462,1007,1008],{},[312,1009,991],{},[462,1011,1012],{},"Rename a project or change its slug.",[462,1014,1015],{},[312,1016,568],{},[446,1018,1019,1024,1028,1031],{},[462,1020,1021],{},[312,1022,1023],{},"DELETE",[462,1025,1026],{},[312,1027,991],{},[462,1029,1030],{},"Delete a project with everything in it.",[462,1032,1033],{},[312,1034,571],{},[908,1036,576],{"id":1037},"environments",[440,1039,1040,1052],{},[443,1041,1042],{},[446,1043,1044,1046,1048,1050],{},[449,1045,919],{},[449,1047,922],{},[449,1049,925],{},[449,1051,928],{},[457,1053,1054,1072,1101,1119,1136],{},[446,1055,1056,1060,1065,1068],{},[462,1057,1058],{},[312,1059,937],{},[462,1061,1062],{},[312,1063,1064],{},"\u002Fprojects\u002F{projectId}\u002Fenvironments",[462,1066,1067],{},"List the project's environments.",[462,1069,1070],{},[312,1071,581],{},[446,1073,1074,1078,1082,1097],{},[462,1075,1076],{},[312,1077,956],{},[462,1079,1080],{},[312,1081,1064],{},[462,1083,1084,1085,1087,1088,1087,1090,1093,1094,486],{},"Create an environment from a ",[312,1086,843],{},", a ",[312,1089,969],{},[312,1091,1092],{},"color",", and whether it is ",[312,1095,1096],{},"live",[462,1098,1099],{},[312,1100,584],{},[446,1102,1103,1107,1112,1115],{},[462,1104,1105],{},[312,1106,937],{},[462,1108,1109],{},[312,1110,1111],{},"\u002Fprojects\u002F{projectId}\u002Fenvironments\u002F{environmentId}",[462,1113,1114],{},"Get an environment.",[462,1116,1117],{},[312,1118,581],{},[446,1120,1121,1125,1129,1132],{},[462,1122,1123],{},[312,1124,1005],{},[462,1126,1127],{},[312,1128,1111],{},[462,1130,1131],{},"Update an environment's name, slug, color, or live flag.",[462,1133,1134],{},[312,1135,587],{},[446,1137,1138,1142,1146,1149],{},[462,1139,1140],{},[312,1141,1023],{},[462,1143,1144],{},[312,1145,1111],{},[462,1147,1148],{},"Delete an environment and everything in it.",[462,1150,1151],{},[312,1152,590],{},[908,1154,595],{"id":1155},"configs",[440,1157,1158,1170],{},[443,1159,1160],{},[446,1161,1162,1164,1166,1168],{},[449,1163,919],{},[449,1165,922],{},[449,1167,925],{},[449,1169,928],{},[457,1171,1172,1198,1250,1268,1307,1329,1347],{},[446,1173,1174,1178,1183,1194],{},[462,1175,1176],{},[312,1177,937],{},[462,1179,1180],{},[312,1181,1182],{},"\u002Fprojects\u002F{projectId}\u002Fconfigs",[462,1184,1185,1186,1189,1190,1193],{},"List the project's configs, without targeting rules. Repeat ",[312,1187,1188],{},"tagIds"," to list the configs that have any of those tags, or send ",[312,1191,1192],{},"untagged=true"," for the configs without tags.",[462,1195,1196],{},[312,1197,600],{},[446,1199,1200,1204,1208,1246],{},[462,1201,1202],{},[312,1203,956],{},[462,1205,1206],{},[312,1207,1182],{},[462,1209,1210,1211,562,1213,562,1216,562,1219,1222,1223,1226,1227,562,1230,1233,1234,676,1237,1240,1241,1222,1244,486],{},"Create a config from its ",[312,1212,852],{},[312,1214,1215],{},"role",[312,1217,1218],{},"lifetime",[312,1220,1221],{},"type",", and ",[312,1224,1225],{},"defaultValue",", which becomes the default targeting rule value in every environment. Optional: ",[312,1228,1229],{},"description",[312,1231,1232],{},"typeOptions"," for the type's constraints, ",[312,1235,1236],{},"client",[312,1238,1239],{},"server"," availability, ",[312,1242,1243],{},"variations",[312,1245,1188],{},[462,1247,1248],{},[312,1249,603],{},[446,1251,1252,1256,1261,1264],{},[462,1253,1254],{},[312,1255,937],{},[462,1257,1258],{},[312,1259,1260],{},"\u002Fprojects\u002F{projectId}\u002Fconfigs\u002F{configKey}",[462,1262,1263],{},"Get a config with its targeting rules in every environment.",[462,1265,1266],{},[312,1267,600],{},[446,1269,1270,1275,1279,1303],{},[462,1271,1272],{},[312,1273,1274],{},"PATCH",[462,1276,1277],{},[312,1278,1260],{},[462,1280,1281,1282,562,1284,562,1286,562,1288,562,1290,562,1292,562,1294,562,1296,1299,1300,1302],{},"Update the config's settings: ",[312,1283,852],{},[312,1285,1229],{},[312,1287,1215],{},[312,1289,1218],{},[312,1291,1221],{},[312,1293,1232],{},[312,1295,1243],{},[312,1297,1298],{},"availability",", or ",[312,1301,1188],{},". Only the fields sent change.",[462,1304,1305],{},[312,1306,606],{},[446,1308,1309,1313,1318,1325],{},[462,1310,1311],{},[312,1312,1005],{},[462,1314,1315],{},[312,1316,1317],{},"\u002Fprojects\u002F{projectId}\u002Fconfigs\u002F{configKey}\u002Ftargets",[462,1319,1320,1321,486],{},"Replace the targeting rules of one environment. See ",[285,1322,1324],{"href":1323},"#updating-targeting-rules","Updating targeting rules",[462,1326,1327],{},[312,1328,609],{},[446,1330,1331,1335,1340,1343],{},[462,1332,1333],{},[312,1334,937],{},[462,1336,1337],{},[312,1338,1339],{},"\u002Fprojects\u002F{projectId}\u002Fconfigs\u002F{configKey}\u002Factivity",[462,1341,1342],{},"The time of the most recent evaluation per environment, SDK key kind, SDK name, and SDK version.",[462,1344,1345],{},[312,1346,600],{},[446,1348,1349,1353,1357,1360],{},[462,1350,1351],{},[312,1352,1023],{},[462,1354,1355],{},[312,1356,1260],{},[462,1358,1359],{},"Archive the config. It can be restored from the dashboard for 30 days.",[462,1361,1362],{},[312,1363,612],{},[281,1365,1366,1367,1369,1370,562,1373,562,1376,562,1379,562,1382,562,1385,562,1388,1299,1390,1393,1394,1396,1397,562,1400,562,1403,1299,1406,1409,1410,1412,1413,562,1416,1222,1419,1422,1423,676,1426,1429,1430,676,1433,1436,1437,562,1440,562,1442,1222,1444,1447,1448,1451,1452,1454],{},"A config's ",[312,1368,1221],{}," is one of ",[312,1371,1372],{},"boolean",[312,1374,1375],{},"string",[312,1377,1378],{},"integer",[312,1380,1381],{},"float",[312,1383,1384],{},"enum",[312,1386,1387],{},"url",[312,1389,372],{},[312,1391,1392],{},"timespan",", and its ",[312,1395,1215],{}," is ",[312,1398,1399],{},"config",[312,1401,1402],{},"flag",[312,1404,1405],{},"kill-switch",[312,1407,1408],{},"experiment",". ",[312,1411,1232],{}," carries the constraints of the type: ",[312,1414,1415],{},"isInteger",[312,1417,1418],{},"min",[312,1420,1421],{},"max"," for numbers, ",[312,1424,1425],{},"values",[312,1427,1428],{},"valueType"," for an enum, ",[312,1431,1432],{},"useSchema",[312,1434,1435],{},"schema"," for JSON, ",[312,1438,1439],{},"unit",[312,1441,1418],{},[312,1443,1421],{},[312,1445,1446],{},"allowFractions"," for a timespan, and ",[312,1449,1450],{},"secureOnly"," for a URL. ",[285,1453,28],{"href":29}," explains each.",[908,1456,48],{"id":1457},"segments",[440,1459,1460,1472],{},[443,1461,1462],{},[446,1463,1464,1466,1468,1470],{},[449,1465,919],{},[449,1467,922],{},[449,1469,925],{},[449,1471,928],{},[457,1473,1474,1492,1522,1540,1564],{},[446,1475,1476,1480,1485,1488],{},[462,1477,1478],{},[312,1479,937],{},[462,1481,1482],{},[312,1483,1484],{},"\u002Fprojects\u002F{projectId}\u002Fsegments",[462,1486,1487],{},"List the project's segments, each with the configs and environments whose rules use it.",[462,1489,1490],{},[312,1491,621],{},[446,1493,1494,1498,1502,1518],{},[462,1495,1496],{},[312,1497,956],{},[462,1499,1500],{},[312,1501,1484],{},[462,1503,1504,1505,1087,1507,1509,1510,1513,1514,1517],{},"Create a segment from a ",[312,1506,852],{},[312,1508,843],{},", its condition ",[312,1511,1512],{},"groups",", and optional environment ",[312,1515,1516],{},"overrides",", a map from environment id to that environment's own groups.",[462,1519,1520],{},[312,1521,624],{},[446,1523,1524,1528,1533,1536],{},[462,1525,1526],{},[312,1527,937],{},[462,1529,1530],{},[312,1531,1532],{},"\u002Fprojects\u002F{projectId}\u002Fsegments\u002F{segmentKey}",[462,1534,1535],{},"Get a segment.",[462,1537,1538],{},[312,1539,621],{},[446,1541,1542,1546,1550,1560],{},[462,1543,1544],{},[312,1545,1005],{},[462,1547,1548],{},[312,1549,1532],{},[462,1551,1552,1553,1555,1556,1559],{},"Replace the segment's key, name, and groups. When ",[312,1554,1516],{}," is sent, the environment overrides become exactly that map, so ",[312,1557,1558],{},"{}"," removes them all; when it is left out, they stay.",[462,1561,1562],{},[312,1563,627],{},[446,1565,1566,1570,1574,1580],{},[462,1567,1568],{},[312,1569,1023],{},[462,1571,1572],{},[312,1573,1532],{},[462,1575,1576,1577,1579],{},"Delete the segment and its overrides. Refused with ",[312,1578,760],{}," while any config's rules use it.",[462,1581,1582],{},[312,1583,630],{},[908,1585,635],{"id":1586},"tags",[440,1588,1589,1601],{},[443,1590,1591],{},[446,1592,1593,1595,1597,1599],{},[449,1594,919],{},[449,1596,922],{},[449,1598,925],{},[449,1600,928],{},[457,1602,1603,1621,1638,1659,1677,1694],{},[446,1604,1605,1609,1614,1617],{},[462,1606,1607],{},[312,1608,937],{},[462,1610,1611],{},[312,1612,1613],{},"\u002Fprojects\u002F{projectId}\u002Ftags",[462,1615,1616],{},"List the project's tags by name.",[462,1618,1619],{},[312,1620,640],{},[446,1622,1623,1627,1631,1634],{},[462,1624,1625],{},[312,1626,956],{},[462,1628,1629],{},[312,1630,1613],{},[462,1632,1633],{},"Create a tag. Names are trimmed, 1 to 50 characters, and unique in the project ignoring case.",[462,1635,1636],{},[312,1637,643],{},[446,1639,1640,1644,1649,1655],{},[462,1641,1642],{},[312,1643,937],{},[462,1645,1646],{},[312,1647,1648],{},"\u002Fprojects\u002F{projectId}\u002Ftags\u002Fby-name",[462,1650,1651,1652,1654],{},"Find a tag by ",[312,1653,843],{},", ignoring surrounding whitespace and case.",[462,1656,1657],{},[312,1658,640],{},[446,1660,1661,1665,1670,1673],{},[462,1662,1663],{},[312,1664,937],{},[462,1666,1667],{},[312,1668,1669],{},"\u002Fprojects\u002F{projectId}\u002Ftags\u002F{tagId}",[462,1671,1672],{},"Get a tag.",[462,1674,1675],{},[312,1676,640],{},[446,1678,1679,1683,1687,1690],{},[462,1680,1681],{},[312,1682,1005],{},[462,1684,1685],{},[312,1686,1669],{},[462,1688,1689],{},"Rename a tag. Its id, and every config assignment, stay the same.",[462,1691,1692],{},[312,1693,646],{},[446,1695,1696,1700,1704,1707],{},[462,1697,1698],{},[312,1699,1023],{},[462,1701,1702],{},[312,1703,1669],{},[462,1705,1706],{},"Delete a tag. Configs that had it lose the assignment.",[462,1708,1709],{},[312,1710,649],{},[277,1712,1714],{"id":1713},"examples","Examples",[281,1716,1717],{},"List the projects of the organization:",[305,1719,1723],{"className":1720,"code":1721,"language":1722,"meta":314,"style":314},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","curl https:\u002F\u002Fapi.configdirector.com\u002Fv1\u002Fprojects \\\n  -H \"Authorization: Bearer ${CONFIGDIRECTOR_TOKEN}\"\n","bash",[312,1724,1725,1738],{"__ignoreMap":314},[376,1726,1727,1731,1734],{"class":378,"line":379},[376,1728,1730],{"class":1729},"sbgvK","curl",[376,1732,1733],{"class":407}," https:\u002F\u002Fapi.configdirector.com\u002Fv1\u002Fprojects",[376,1735,1737],{"class":1736},"s_hVV"," \\\n",[376,1739,1740,1744,1746,1749,1752,1756],{"class":378,"line":386},[376,1741,1743],{"class":1742},"stzsN","  -H",[376,1745,404],{"class":403},[376,1747,1748],{"class":407},"Authorization: Bearer ",[376,1750,1751],{"class":403},"${",[376,1753,1755],{"class":1754},"su5hD","CONFIGDIRECTOR_TOKEN",[376,1757,1758],{"class":403},"}\"\n",[281,1760,1761],{},"Create a temporary feature flag that starts off in every environment:",[305,1763,1765],{"className":1720,"code":1764,"language":1722,"meta":314,"style":314},"curl -X POST https:\u002F\u002Fapi.configdirector.com\u002Fv1\u002Fprojects\u002F${PROJECT_ID}\u002Fconfigs \\\n  -H \"Authorization: Bearer ${CONFIGDIRECTOR_TOKEN}\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"key\": \"new-checkout\",\n    \"description\": \"The redesigned checkout flow\",\n    \"role\": \"flag\",\n    \"lifetime\": \"temporary\",\n    \"type\": \"boolean\",\n    \"defaultValue\": false\n  }'\n",[312,1766,1767,1793,1810,1822,1832,1837,1843,1849,1855,1861,1867],{"__ignoreMap":314},[376,1768,1769,1771,1774,1777,1780,1782,1785,1788,1791],{"class":378,"line":379},[376,1770,1730],{"class":1729},[376,1772,1773],{"class":1742}," -X",[376,1775,1776],{"class":407}," POST",[376,1778,1779],{"class":407}," https:\u002F\u002Fapi.configdirector.com\u002Fv1\u002Fprojects\u002F",[376,1781,1751],{"class":382},[376,1783,1784],{"class":1754},"PROJECT_ID",[376,1786,1787],{"class":382},"}",[376,1789,1790],{"class":407},"\u002Fconfigs",[376,1792,1737],{"class":1736},[376,1794,1795,1797,1799,1801,1803,1805,1808],{"class":378,"line":386},[376,1796,1743],{"class":1742},[376,1798,404],{"class":403},[376,1800,1748],{"class":407},[376,1802,1751],{"class":403},[376,1804,1755],{"class":1754},[376,1806,1807],{"class":403},"}\"",[376,1809,1737],{"class":1736},[376,1811,1812,1814,1816,1818,1820],{"class":378,"line":416},[376,1813,1743],{"class":1742},[376,1815,404],{"class":403},[376,1817,333],{"class":407},[376,1819,397],{"class":403},[376,1821,1737],{"class":1736},[376,1823,1824,1827,1830],{"class":378,"line":435},[376,1825,1826],{"class":1742},"  -d",[376,1828,1829],{"class":403}," '",[376,1831,383],{"class":407},[376,1833,1834],{"class":378,"line":884},[376,1835,1836],{"class":407},"    \"key\": \"new-checkout\",\n",[376,1838,1840],{"class":378,"line":1839},6,[376,1841,1842],{"class":407},"    \"description\": \"The redesigned checkout flow\",\n",[376,1844,1846],{"class":378,"line":1845},7,[376,1847,1848],{"class":407},"    \"role\": \"flag\",\n",[376,1850,1852],{"class":378,"line":1851},8,[376,1853,1854],{"class":407},"    \"lifetime\": \"temporary\",\n",[376,1856,1858],{"class":378,"line":1857},9,[376,1859,1860],{"class":407},"    \"type\": \"boolean\",\n",[376,1862,1864],{"class":378,"line":1863},10,[376,1865,1866],{"class":407},"    \"defaultValue\": false\n",[376,1868,1870,1873],{"class":378,"line":1869},11,[376,1871,1872],{"class":407},"  }",[376,1874,1875],{"class":403},"'\n",[908,1877,1324],{"id":1878},"updating-targeting-rules",[281,1880,1881,1884,1885,1888],{},[312,1882,1883],{},"PUT \u002Fprojects\u002F{projectId}\u002Fconfigs\u002F{configKey}\u002Ftargets"," replaces the rules of one environment. The body names the environment, the default targeting rule value, and the rules in order. Each rule, condition, and percentage carries an ",[312,1886,1887],{},"id",", a UUID you generate.",[281,1890,1891,1892,1895,1896,1899],{},"A conditional rule serves ",[312,1893,1894],{},"true"," to two named users, and the default targeting rule serves ",[312,1897,1898],{},"false"," to everyone else:",[305,1901,1903],{"className":1720,"code":1902,"language":1722,"meta":314,"style":314},"curl -X PUT https:\u002F\u002Fapi.configdirector.com\u002Fv1\u002Fprojects\u002F${PROJECT_ID}\u002Fconfigs\u002Fnew-checkout\u002Ftargets \\\n  -H \"Authorization: Bearer ${CONFIGDIRECTOR_TOKEN}\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"environmentId\": \"'\"${ENVIRONMENT_ID}\"'\",\n    \"defaultValue\": false,\n    \"rules\": [\n      {\n        \"id\": \"7a6b0d1e-3b4e-4a8e-9c3b-1f2e3d4c5b6a\",\n        \"type\": \"conditional\",\n        \"order\": 0,\n        \"target\": \"value\",\n        \"value\": true,\n        \"conditions\": [\n          {\n            \"id\": \"0c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f\",\n            \"kind\": \"attribute\",\n            \"attribute\": \"identifier\",\n            \"operator\": \"is one of\",\n            \"targetType\": \"text\",\n            \"targetValues\": [\"user-101\", \"user-202\"]\n          }\n        ]\n      }\n    ]\n  }'\n",[312,1904,1905,1927,1943,1955,1963,1980,1985,1990,1995,2000,2005,2010,2016,2022,2028,2034,2040,2046,2052,2058,2064,2070,2076,2082,2088,2094],{"__ignoreMap":314},[376,1906,1907,1909,1911,1914,1916,1918,1920,1922,1925],{"class":378,"line":379},[376,1908,1730],{"class":1729},[376,1910,1773],{"class":1742},[376,1912,1913],{"class":407}," PUT",[376,1915,1779],{"class":407},[376,1917,1751],{"class":382},[376,1919,1784],{"class":1754},[376,1921,1787],{"class":382},[376,1923,1924],{"class":407},"\u002Fconfigs\u002Fnew-checkout\u002Ftargets",[376,1926,1737],{"class":1736},[376,1928,1929,1931,1933,1935,1937,1939,1941],{"class":378,"line":386},[376,1930,1743],{"class":1742},[376,1932,404],{"class":403},[376,1934,1748],{"class":407},[376,1936,1751],{"class":403},[376,1938,1755],{"class":1754},[376,1940,1807],{"class":403},[376,1942,1737],{"class":1736},[376,1944,1945,1947,1949,1951,1953],{"class":378,"line":416},[376,1946,1743],{"class":1742},[376,1948,404],{"class":403},[376,1950,333],{"class":407},[376,1952,397],{"class":403},[376,1954,1737],{"class":1736},[376,1956,1957,1959,1961],{"class":378,"line":435},[376,1958,1826],{"class":1742},[376,1960,1829],{"class":403},[376,1962,383],{"class":407},[376,1964,1965,1968,1971,1974,1977],{"class":378,"line":884},[376,1966,1967],{"class":407},"    \"environmentId\": \"",[376,1969,1970],{"class":403},"'\"${",[376,1972,1973],{"class":1754},"ENVIRONMENT_ID",[376,1975,1976],{"class":403},"}\"'",[376,1978,1979],{"class":407},"\",\n",[376,1981,1982],{"class":378,"line":1839},[376,1983,1984],{"class":407},"    \"defaultValue\": false,\n",[376,1986,1987],{"class":378,"line":1845},[376,1988,1989],{"class":407},"    \"rules\": [\n",[376,1991,1992],{"class":378,"line":1851},[376,1993,1994],{"class":407},"      {\n",[376,1996,1997],{"class":378,"line":1857},[376,1998,1999],{"class":407},"        \"id\": \"7a6b0d1e-3b4e-4a8e-9c3b-1f2e3d4c5b6a\",\n",[376,2001,2002],{"class":378,"line":1863},[376,2003,2004],{"class":407},"        \"type\": \"conditional\",\n",[376,2006,2007],{"class":378,"line":1869},[376,2008,2009],{"class":407},"        \"order\": 0,\n",[376,2011,2013],{"class":378,"line":2012},12,[376,2014,2015],{"class":407},"        \"target\": \"value\",\n",[376,2017,2019],{"class":378,"line":2018},13,[376,2020,2021],{"class":407},"        \"value\": true,\n",[376,2023,2025],{"class":378,"line":2024},14,[376,2026,2027],{"class":407},"        \"conditions\": [\n",[376,2029,2031],{"class":378,"line":2030},15,[376,2032,2033],{"class":407},"          {\n",[376,2035,2037],{"class":378,"line":2036},16,[376,2038,2039],{"class":407},"            \"id\": \"0c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f\",\n",[376,2041,2043],{"class":378,"line":2042},17,[376,2044,2045],{"class":407},"            \"kind\": \"attribute\",\n",[376,2047,2049],{"class":378,"line":2048},18,[376,2050,2051],{"class":407},"            \"attribute\": \"identifier\",\n",[376,2053,2055],{"class":378,"line":2054},19,[376,2056,2057],{"class":407},"            \"operator\": \"is one of\",\n",[376,2059,2061],{"class":378,"line":2060},20,[376,2062,2063],{"class":407},"            \"targetType\": \"text\",\n",[376,2065,2067],{"class":378,"line":2066},21,[376,2068,2069],{"class":407},"            \"targetValues\": [\"user-101\", \"user-202\"]\n",[376,2071,2073],{"class":378,"line":2072},22,[376,2074,2075],{"class":407},"          }\n",[376,2077,2079],{"class":378,"line":2078},23,[376,2080,2081],{"class":407},"        ]\n",[376,2083,2085],{"class":378,"line":2084},24,[376,2086,2087],{"class":407},"      }\n",[376,2089,2091],{"class":378,"line":2090},25,[376,2092,2093],{"class":407},"    ]\n",[376,2095,2097,2099],{"class":378,"line":2096},26,[376,2098,1872],{"class":407},[376,2100,1875],{"class":403},[281,2102,2103,2104,2106,2107,2110,2111,2114,2115,2118,2119,2106,2122,2125,2126,2128,2129,2106,2131,2133,2134,2137,2138,2141,2142,2144,2145,562,2148,562,2151,562,2153,562,2156,1299,2159,791,2162,2165,2166,2169,2170,562,2172,562,2175,562,2178,562,2181,1299,2184,2186,2187,2190,2191,2193],{},"A rule has a ",[312,2105,1221],{}," of ",[312,2108,2109],{},"conditional"," or ",[312,2112,2113],{},"percentage",". A conditional rule holds ",[312,2116,2117],{},"conditions",", every one of which must match, and either a ",[312,2120,2121],{},"target",[312,2123,2124],{},"value"," with the ",[312,2127,2124],{}," to serve or a ",[312,2130,2121],{},[312,2132,2113],{}," with ",[312,2135,2136],{},"percentages",", a list of ",[312,2139,2140],{},"{ id, percentage, value }"," that adds up to 100. A percentage rule holds only ",[312,2143,2136],{},". An attribute condition tests ",[312,2146,2147],{},"identifier",[312,2149,2150],{},"kind",[312,2152,843],{},[312,2154,2155],{},"appName",[312,2157,2158],{},"appVersion",[312,2160,2161],{},"traits",[312,2163,2164],{},"trait"," JSON pointer, read as the ",[312,2167,2168],{},"targetType"," ",[312,2171,310],{},[312,2173,2174],{},"number",[312,2176,2177],{},"semver",[312,2179,2180],{},"datetime",[312,2182,2183],{},"array",[312,2185,1372],{},", each with its own operators. A segment condition is ",[312,2188,2189],{},"{ id, kind: \"segment\", operator: \"in\" | \"not in\", segmentId }",". The OpenAPI document lists every operator per target type, and the ",[285,2192,287],{"href":243}," page shows the same rules in HCL.",[281,2195,2196,2197,486],{},"Rules are validated against the config's type and constraints before they are saved, exactly as in the dashboard: a value outside an integer's range, a URL that is not HTTPS on a secure-only config, or a JSON value that fails the config's schema is refused with ",[312,2198,728],{},[2200,2201,2202],"style",{},"html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sseR_, html code.shiki .sseR_{--shiki-light:#9C3EDA;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":314,"searchDepth":386,"depth":386,"links":2204},[2205,2206,2207,2208,2209,2210,2211,2212,2219],{"id":279,"depth":386,"text":5},{"id":320,"depth":386,"text":321},{"id":343,"depth":386,"text":344},{"id":529,"depth":386,"text":530},{"id":661,"depth":386,"text":662},{"id":686,"depth":386,"text":687},{"id":889,"depth":386,"text":890},{"id":537,"depth":386,"text":906,"children":2213},[2214,2215,2216,2217,2218],{"id":910,"depth":416,"text":556},{"id":1037,"depth":416,"text":576},{"id":1155,"depth":416,"text":595},{"id":1457,"depth":416,"text":48},{"id":1586,"depth":416,"text":635},{"id":1713,"depth":386,"text":1714,"children":2220},[2221],{"id":1878,"depth":416,"text":1324},"Manage projects, environments, configs, targeting rules, segments, and tags over HTTPS with an API token. The base URL, authentication, permissions, error responses, usage counting, the endpoints, and the OpenAPI document.","md",null,{"modifiedAt":2226},"2026-10-16T18:11:26.000Z",{"title":252,"icon":255},{"title":2229,"description":2230},"Admin API Reference","The ConfigDirector Admin API. Authenticate with an API token, manage projects, environments, configs, targeting rules, segments, and tags, read the error codes, and generate a client from the OpenAPI document.","NsO0lFHfiuO7F-feo_EIiaA56LrbwtSjECr9mDEhhSg",[2233,2235],{"title":247,"path":248,"stem":249,"description":2234,"icon":250,"children":-1},"Manage projects, configs, targeting rules, and segments from AI coding tools through the Model Context Protocol",{"title":263,"path":264,"stem":265,"description":2236,"icon":266,"children":-1},"Move your feature flags from LaunchDarkly to ConfigDirector. How projects, environments, flags, contexts, segments, and rollouts map, how to recreate the flags, and how to switch the SDKs over without a risky release.",1792183990802]