[{"data":1,"prerenderedAt":991},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Freference\u002Fapi\u002Fversioning":143,"\u002Fdocs\u002Freference\u002Fapi\u002Fversioning-surround":986},[4],{"title":5,"path":6,"stem":7,"children":8,"page":32},"Docs","\u002Fdocs","docs",[9,33,58,79,112,117],{"title":10,"path":11,"stem":12,"children":13,"page":32},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002Fgetting-started",[14,18,23,28],{"title":10,"path":15,"stem":16,"order":17},"\u002Fdocs\u002Fgetting-started\u002F_dir","docs\u002Fgetting-started\u002F_dir",1,{"title":19,"path":20,"stem":21,"order":22},"Configuration Reference","\u002Fdocs\u002Fgetting-started\u002Fconfiguration","docs\u002Fgetting-started\u002Fconfiguration",2,{"title":24,"path":25,"stem":26,"order":27},"Deployment Guide","\u002Fdocs\u002Fgetting-started\u002Fdeployment","docs\u002Fgetting-started\u002Fdeployment",3,{"title":29,"path":30,"stem":31,"order":17},"Quick Start","\u002Fdocs\u002Fgetting-started\u002Fquick-start","docs\u002Fgetting-started\u002Fquick-start",false,{"title":34,"path":35,"stem":36,"children":37,"page":32},"Guides","\u002Fdocs\u002Fguides","docs\u002Fguides",[38,41,45,49,54],{"title":34,"path":39,"stem":40,"order":22},"\u002Fdocs\u002Fguides\u002F_dir","docs\u002Fguides\u002F_dir",{"title":42,"path":43,"stem":44,"order":22},"Notifications","\u002Fdocs\u002Fguides\u002Fnotifications","docs\u002Fguides\u002Fnotifications",{"title":46,"path":47,"stem":48,"order":17},"Scoring Algorithm","\u002Fdocs\u002Fguides\u002Fscoring","docs\u002Fguides\u002Fscoring",{"title":50,"path":51,"stem":52,"order":53},"Sunset Mode","\u002Fdocs\u002Fguides\u002Fsunset-mode","docs\u002Fguides\u002Fsunset-mode",4,{"title":55,"path":56,"stem":57,"order":27},"Troubleshooting","\u002Fdocs\u002Fguides\u002Ftroubleshooting","docs\u002Fguides\u002Ftroubleshooting",{"title":59,"path":60,"stem":61,"children":62,"page":32},"Project","\u002Fdocs\u002Fproject","docs\u002Fproject",[63,67,71,75],{"title":59,"path":64,"stem":65,"order":66},"\u002Fdocs\u002Fproject\u002F_dir","docs\u002Fproject\u002F_dir",6,{"title":68,"path":69,"stem":70,"order":27},"Changelog","\u002Fdocs\u002Fproject\u002Fchangelog","docs\u002Fproject\u002Fchangelog",{"title":72,"path":73,"stem":74,"order":17},"Contributing","\u002Fdocs\u002Fproject\u002Fcontributing","docs\u002Fproject\u002Fcontributing",{"title":76,"path":77,"stem":78,"order":22},"Contributors","\u002Fdocs\u002Fproject\u002Fcontributors","docs\u002Fproject\u002Fcontributors",{"title":80,"path":81,"stem":82,"children":83,"page":32},"Reference","\u002Fdocs\u002Freference","docs\u002Freference",[84,87,108],{"title":80,"path":85,"stem":86,"order":27},"\u002Fdocs\u002Freference\u002F_dir","docs\u002Freference\u002F_dir",{"title":88,"path":89,"stem":90,"children":91,"page":32},"Api","\u002Fdocs\u002Freference\u002Fapi","docs\u002Freference\u002Fapi",[92,96,100,104],{"title":93,"path":94,"stem":95,"order":22},"API Reference","\u002Fdocs\u002Freference\u002Fapi\u002F_dir","docs\u002Freference\u002Fapi\u002F_dir",{"title":97,"path":98,"stem":99,"order":22},"API Examples","\u002Fdocs\u002Freference\u002Fapi\u002Fexamples","docs\u002Freference\u002Fapi\u002Fexamples",{"title":101,"path":102,"stem":103,"order":53},"API Versioning & Stability Guarantees","\u002Fdocs\u002Freference\u002Fapi\u002Fversioning","docs\u002Freference\u002Fapi\u002Fversioning",{"title":105,"path":106,"stem":107,"order":27},"Common Workflows","\u002Fdocs\u002Freference\u002Fapi\u002Fworkflows","docs\u002Freference\u002Fapi\u002Fworkflows",{"title":109,"path":110,"stem":111,"order":17},"Architecture","\u002Fdocs\u002Freference\u002Farchitecture","docs\u002Freference\u002Farchitecture",{"title":113,"path":114,"stem":115,"order":116},"Release Workflow","\u002Fdocs\u002Freleasing","docs\u002Freleasing",5,{"title":118,"path":119,"stem":120,"children":121,"order":17},"Security Policy","\u002Fdocs\u002Fsecurity","docs\u002Fsecurity\u002Findex",[122,123,127,131,134,137,140],{"title":118,"path":119,"stem":120,"order":17},{"title":124,"path":125,"stem":126,"order":53},"Security","\u002Fdocs\u002Fsecurity\u002F_dir","docs\u002Fsecurity\u002F_dir",{"title":128,"path":129,"stem":130,"order":22},"OWASP ZAP API Scan — Baseline Report","\u002Fdocs\u002Fsecurity\u002Fzap-baseline-20260310","docs\u002Fsecurity\u002Fzap-baseline-20260310",{"title":128,"path":132,"stem":133,"order":27},"\u002Fdocs\u002Fsecurity\u002Fzap-baseline-20260316","docs\u002Fsecurity\u002Fzap-baseline-20260316",{"title":128,"path":135,"stem":136,"order":53},"\u002Fdocs\u002Fsecurity\u002Fzap-baseline-20260323","docs\u002Fsecurity\u002Fzap-baseline-20260323",{"title":128,"path":138,"stem":139,"order":116},"\u002Fdocs\u002Fsecurity\u002Fzap-baseline-20260324","docs\u002Fsecurity\u002Fzap-baseline-20260324",{"title":128,"path":141,"stem":142},"\u002Fdocs\u002Fsecurity\u002Fzap-baseline-20260406","docs\u002Fsecurity\u002Fzap-baseline-20260406",{"id":144,"title":101,"body":145,"description":151,"extension":980,"links":981,"meta":982,"navigation":983,"path":102,"seo":984,"stem":103,"__hash__":985},"docs\u002Fdocs\u002Freference\u002Fapi\u002Fversioning.md",{"type":146,"value":147,"toc":964},"minimark",[148,152,157,165,176,185,189,202,256,260,267,300,304,311,334,338,345,415,419,422,460,464,492,496,499,504,547,551,716,720,847,851,943,946],[149,150,151],"p",{},"This document describes Capacitarr's API versioning policy, what constitutes a breaking change, and what API consumers can rely on remaining stable.",[153,154,156],"h2",{"id":155},"current-api-version","Current API Version",[149,158,159,160,164],{},"The stable API is ",[161,162,163],"strong",{},"v1",", served at:",[166,167,172],"pre",{"className":168,"code":170,"language":171},[169],"language-text","http:\u002F\u002Flocalhost:2187\u002Fapi\u002Fv1\u002F\n","text",[173,174,170],"code",{"__ignoreMap":175},"",[149,177,178,179,184],{},"All endpoints documented in the ",[180,181,183],"a",{"href":182},"openapi.yaml","OpenAPI spec"," are under this prefix.",[153,186,188],{"id":187},"semantic-versioning","Semantic Versioning",[149,190,191,192,197,198,201],{},"Capacitarr follows ",[180,193,188],{"href":194,"rel":195},"https:\u002F\u002Fsemver.org\u002F",[196],"nofollow"," (",[173,199,200],{},"MAJOR.MINOR.PATCH","). Here's how semver maps to API changes:",[203,204,205,218],"table",{},[206,207,208],"thead",{},[209,210,211,215],"tr",{},[212,213,214],"th",{},"Version Bump",[212,216,217],{},"What Changes",[219,220,221,232,242],"tbody",{},[209,222,223,229],{},[224,225,226],"td",{},[161,227,228],{},"PATCH",[224,230,231],{},"Bug fixes to existing endpoint behavior, documentation corrections",[209,233,234,239],{},[224,235,236],{},[161,237,238],{},"MINOR",[224,240,241],{},"New endpoints, new optional query parameters, new fields added to responses, new optional fields in request bodies",[209,243,244,249],{},[224,245,246],{},[161,247,248],{},"MAJOR",[224,250,251,252,255],{},"URL prefix changes (",[173,253,254],{},"\u002Fapi\u002Fv2\u002F","), field removals, field type changes, endpoint removals, breaking changes to auth behavior",[153,257,259],{"id":258},"what-is-a-breaking-change","What Is a Breaking Change",[149,261,262,263,266],{},"The following are considered ",[161,264,265],{},"breaking changes"," and will only occur in a major version bump:",[268,269,270,274,285,288,291,294,297],"ul",{},[271,272,273],"li",{},"Removing a field from a response body",[271,275,276,277,280,281,284],{},"Changing a field's type (e.g., ",[173,278,279],{},"string"," → ",[173,282,283],{},"number",")",[271,286,287],{},"Removing an endpoint",[271,289,290],{},"Changing an endpoint's HTTP method",[271,292,293],{},"Making a previously optional request field required",[271,295,296],{},"Changing authentication requirements (e.g., making a public endpoint require auth)",[271,298,299],{},"Changing the error response format (structure, not message text)",[153,301,303],{"id":302},"what-is-not-a-breaking-change","What Is NOT a Breaking Change",[149,305,306,307,310],{},"The following are ",[161,308,309],{},"non-breaking"," and may occur in any minor or patch release:",[268,312,313,316,319,322,325,328,331],{},[271,314,315],{},"Adding new fields to response bodies",[271,317,318],{},"Adding new endpoints",[271,320,321],{},"Adding new optional query parameters",[271,323,324],{},"Adding new optional fields to request bodies",[271,326,327],{},"Adding new enum values to existing fields (e.g., new integration types)",[271,329,330],{},"Changing error messages (the text, not the structure)",[271,332,333],{},"Performance improvements",[153,335,337],{"id":336},"stability-guarantees","Stability Guarantees",[149,339,340,341,344],{},"API consumers can rely on the following remaining stable within ",[173,342,343],{},"\u002Fapi\u002Fv1\u002F",":",[268,346,347,356,362,372,405],{},[271,348,349,352,353,355],{},[161,350,351],{},"No breaking changes"," to ",[173,354,343],{}," endpoints without a major version bump",[271,357,358,361],{},[161,359,360],{},"All three authentication methods"," — API key header, Bearer JWT, and Cookie JWT — are stable",[271,363,364,367,368,371],{},[161,365,366],{},"Response JSON field names"," use ",[173,369,370],{},"camelCase"," and will not be renamed",[271,373,374,377,378,381,382,385,386,381,389,381,392,381,395,381,398,381,401,404],{},[161,375,376],{},"HTTP status codes"," for success (",[173,379,380],{},"200",", ",[173,383,384],{},"201",") and error (",[173,387,388],{},"400",[173,390,391],{},"401",[173,393,394],{},"403",[173,396,397],{},"404",[173,399,400],{},"409",[173,402,403],{},"500",") cases are stable",[271,406,407,410,411,414],{},[161,408,409],{},"Error response format"," — ",[173,412,413],{},"{\"error\": \"message\"}"," — is stable",[153,416,418],{"id":417},"deprecation-policy","Deprecation Policy",[149,420,421],{},"When an endpoint or field needs to be removed:",[423,424,425,432,439,447],"ol",{},[271,426,427,428,431],{},"It will be ",[161,429,430],{},"deprecated first"," with a minimum notice period before removal",[271,433,434,435,438],{},"Deprecated endpoints will include a ",[173,436,437],{},"Deprecation"," HTTP header in responses",[271,440,441,442,446],{},"A ",[161,443,444],{},[173,445,254],{}," version will be introduced before any breaking changes take effect",[271,448,449,450,452,453,455,456,459],{},"Both ",[173,451,343],{}," and ",[173,454,254],{}," will ",[161,457,458],{},"run simultaneously"," during a transition period to give consumers time to migrate",[153,461,463],{"id":462},"recommendations-for-api-consumers","Recommendations for API Consumers",[268,465,466,472,478,484],{},[271,467,468,471],{},[161,469,470],{},"Ignore unknown fields"," in responses — new fields may be added at any time (forward compatibility)",[271,473,474,477],{},[161,475,476],{},"Don't rely on field ordering"," in JSON responses",[271,479,480,483],{},[161,481,482],{},"Use the OpenAPI spec"," as the source of truth for request\u002Fresponse shapes",[271,485,486,197,489,491],{},[161,487,488],{},"Pin to a specific API version",[173,490,343],{},") — don't use unversioned endpoints",[153,493,495],{"id":494},"breaking-changes-in-v200","Breaking Changes in v2.0.0",[149,497,498],{},"The 2.0.0 release includes the following breaking changes from the pre-release (1.0.0-rc.x) series:",[500,501,503],"h3",{"id":502},"database","Database",[268,505,506,516],{},[271,507,508,511,512,515],{},[161,509,510],{},"Fresh database schema."," The 18 incremental migrations have been replaced with a single baseline migration. Existing databases from 1.0.0-rc.x are ",[161,513,514],{},"not compatible"," — users start fresh on upgrade.",[271,517,518,519,522,523],{},"The ",[173,520,521],{},"audit_logs"," table has been split into two purpose-specific tables:\n",[268,524,525,541],{},[271,526,527,530,531,280,534,537,538,284],{},[173,528,529],{},"approval_queue"," — active items in the approval workflow (state machine: ",[173,532,533],{},"pending",[173,535,536],{},"approved","\u002F",[173,539,540],{},"rejected",[271,542,543,546],{},[173,544,545],{},"audit_log"," — permanent, append-only history of deletions and dry-runs",[500,548,550],{"id":549},"api-endpoints","API Endpoints",[203,552,553,566],{},[206,554,555],{},[209,556,557,560,563],{},[212,558,559],{},"Old Endpoint",[212,561,562],{},"New Endpoint",[212,564,565],{},"Notes",[219,567,568,583,598,613,628,643,658,674,688,702],{},[209,569,570,575,580],{},[224,571,572],{},[173,573,574],{},"GET \u002Fapi\u002Fv1\u002Faudit",[224,576,577],{},[173,578,579],{},"GET \u002Fapi\u002Fv1\u002Faudit-log",[224,581,582],{},"History only (deleted, dry-run, dry-delete)",[209,584,585,590,595],{},[224,586,587],{},[173,588,589],{},"GET \u002Fapi\u002Fv1\u002Faudit\u002Frecent",[224,591,592],{},[173,593,594],{},"GET \u002Fapi\u002Fv1\u002Faudit-log\u002Frecent",[224,596,597],{},"Dashboard mini-feed (history)",[209,599,600,605,610],{},[224,601,602],{},[173,603,604],{},"GET \u002Fapi\u002Fv1\u002Faudit\u002Fgrouped",[224,606,607],{},[173,608,609],{},"GET \u002Fapi\u002Fv1\u002Faudit-log\u002Fgrouped",[224,611,612],{},"Grouped history view",[209,614,615,620,625],{},[224,616,617],{},[173,618,619],{},"POST \u002Fapi\u002Fv1\u002Faudit\u002F:id\u002Fapprove",[224,621,622],{},[173,623,624],{},"POST \u002Fapi\u002Fv1\u002Fapproval-queue\u002F:id\u002Fapprove",[224,626,627],{},"Approve a queued item",[209,629,630,635,640],{},[224,631,632],{},[173,633,634],{},"POST \u002Fapi\u002Fv1\u002Faudit\u002F:id\u002Freject",[224,636,637],{},[173,638,639],{},"POST \u002Fapi\u002Fv1\u002Fapproval-queue\u002F:id\u002Freject",[224,641,642],{},"Reject (snooze) a queued item",[209,644,645,650,655],{},[224,646,647],{},[173,648,649],{},"POST \u002Fapi\u002Fv1\u002Faudit\u002F:id\u002Funsnooze",[224,651,652],{},[173,653,654],{},"POST \u002Fapi\u002Fv1\u002Fapproval-queue\u002F:id\u002Funsnooze",[224,656,657],{},"Requeue a snoozed item",[209,659,660,666,671],{},[224,661,662],{},[663,664,665],"em",{},"(none)",[224,667,668],{},[173,669,670],{},"GET \u002Fapi\u002Fv1\u002Fapproval-queue",[224,672,673],{},"List queued items",[209,675,676,680,685],{},[224,677,678],{},[663,679,665],{},[224,681,682],{},[173,683,684],{},"DELETE \u002Fapi\u002Fv1\u002Fapproval-queue\u002F:id",[224,686,687],{},"Remove a specific queued item",[209,689,690,694,699],{},[224,691,692],{},[663,693,665],{},[224,695,696],{},[173,697,698],{},"POST \u002Fapi\u002Fv1\u002Fapproval-queue\u002Fclear",[224,700,701],{},"Clear all queued items",[209,703,704,708,713],{},[224,705,706],{},[663,707,665],{},[224,709,710],{},[173,711,712],{},"GET \u002Fapi\u002Fv1\u002Fevents",[224,714,715],{},"SSE real-time event stream",[500,717,719],{"id":718},"new-v2-endpoint-groups","New v2 Endpoint Groups",[203,721,722,735],{},[206,723,724],{},[209,725,726,729,732],{},[212,727,728],{},"Group",[212,730,731],{},"Endpoints",[212,733,734],{},"Description",[219,736,737,758,776,797,823],{},[209,738,739,744,755],{},[224,740,741],{},[161,742,743],{},"Analytics",[224,745,746,381,749,381,752],{},[173,747,748],{},"GET \u002Fapi\u002Fv1\u002Fanalytics\u002Fdead-content",[173,750,751],{},"stale-content",[173,753,754],{},"forecast",[224,756,757],{},"Watch intelligence and capacity forecast",[209,759,760,765,773],{},[224,761,762],{},[161,763,764],{},"Factor Weights",[224,766,767,381,770],{},[173,768,769],{},"GET",[173,771,772],{},"PUT \u002Fapi\u002Fv1\u002Fscoring-factor-weights",[224,774,775],{},"Pluggable scoring factor weight registry",[209,777,778,783,794],{},[224,779,780],{},[161,781,782],{},"Migration",[224,784,785,381,788,381,791],{},[173,786,787],{},"GET \u002Fapi\u002Fv1\u002Fmigration\u002Fstatus",[173,789,790],{},"POST \u002Fexecute",[173,792,793],{},"\u002Fdismiss",[224,795,796],{},"v1→v2 database migration",[209,798,799,804,820],{},[224,800,801],{},[161,802,803],{},"Deletion Queue",[224,805,806,381,808,381,811,381,814,381,817],{},[173,807,769],{},[173,809,810],{},"DELETE \u002Fapi\u002Fv1\u002Fdeletion-queue",[173,812,813],{},"POST \u002Fsnooze",[173,815,816],{},"\u002Fclear",[173,818,819],{},"GET \u002Fgrace-period",[224,821,822],{},"Deletion queue management",[209,824,825,830,844],{},[224,826,827],{},[161,828,829],{},"Settings Backup",[224,831,832,381,835,381,838,381,841],{},[173,833,834],{},"GET \u002Fapi\u002Fv1\u002Fsettings\u002Fexport",[173,836,837],{},"POST \u002Fimport",[173,839,840],{},"\u002Fimport\u002Fpreview",[173,842,843],{},"\u002Fimport\u002Fcommit",[224,845,846],{},"Settings export\u002Fimport with section-level granularity",[500,848,850],{"id":849},"response-schema-changes","Response Schema Changes",[268,852,853,879,899,920,940],{},[271,854,855,280,858,861,862,865,866,869,870,537,873,537,876],{},[173,856,857],{},"AuditLog",[173,859,860],{},"AuditLogEntry",": removed ",[173,863,864],{},"snoozedUntil"," field, ",[173,867,868],{},"action"," restricted to ",[173,871,872],{},"deleted",[173,874,875],{},"dry_run",[173,877,878],{},"dry_delete",[271,880,881,882,885,886,889,890,537,892,537,894,896,897],{},"New ",[173,883,884],{},"ApprovalQueueItem"," type with ",[173,887,888],{},"status"," field (",[173,891,533],{},[173,893,536],{},[173,895,540],{},") instead of overloaded ",[173,898,868],{},[271,900,901,904,905,381,908,911,912,915,916,919],{},[173,902,903],{},"PreferenceSet",": scoring weight fields (",[173,906,907],{},"watchHistoryWeight",[173,909,910],{},"fileSizeWeight",", etc.) moved to separate ",[173,913,914],{},"ScoringFactorWeight"," table and ",[173,917,918],{},"\u002Fscoring-factor-weights"," endpoint",[271,921,922,925,926,452,929,932,933,936,937],{},[173,923,924],{},"IntegrationConfig",": new ",[173,927,928],{},"libraryId",[173,930,931],{},"collectionDeletion"," fields; ",[173,934,935],{},"overseerr"," type renamed to ",[173,938,939],{},"seerr",[271,941,942],{},"Activity events are now streamed via SSE in addition to the REST endpoint",[500,944,109],{"id":945},"architecture",[268,947,948,951,958,961],{},[271,949,950],{},"All business logic moved from route handlers to a service layer",[271,952,953,954,957],{},"Event bus replaces direct ",[173,955,956],{},"LogActivity()"," calls — 70 typed event types (see Architecture for current count)",[271,959,960],{},"SSE replaces polling for real-time UI updates",[271,962,963],{},"Notification dispatch is event-driven (subscriber) instead of inline calls",{"title":175,"searchDepth":17,"depth":22,"links":965},[966,967,968,969,970,971,972,973],{"id":155,"depth":22,"text":156},{"id":187,"depth":22,"text":188},{"id":258,"depth":22,"text":259},{"id":302,"depth":22,"text":303},{"id":336,"depth":22,"text":337},{"id":417,"depth":22,"text":418},{"id":462,"depth":22,"text":463},{"id":494,"depth":22,"text":495,"children":974},[975,976,977,978,979],{"id":502,"depth":27,"text":503},{"id":549,"depth":27,"text":550},{"id":718,"depth":27,"text":719},{"id":849,"depth":27,"text":850},{"id":945,"depth":27,"text":109},"md",null,{},{"order":53},{"title":101,"description":151},"PswyNNhmeDhzqufU8J1G7ML5aCGCI8-MgQp7R2LCfHo",[987,989],{"title":97,"path":98,"stem":99,"description":988,"order":22,"children":-1},"Curl examples for every Capacitarr API endpoint.",{"title":105,"path":106,"stem":107,"description":990,"order":27,"children":-1},"Multi-step guides for typical Capacitarr API tasks. Each workflow combines several API calls in sequence.",1776649616640]