[{"data":1,"prerenderedAt":1160},["ShallowReactive",2],{"/api/overview/sdks":3,"/api/overview/sdks-surround":1151},{"id":4,"title":5,"body":6,"description":1143,"extension":1144,"links":1145,"meta":1146,"navigation":151,"path":1147,"seo":1148,"stem":1149,"__hash__":1150},"docs/api/1.overview/sdks.md","SDKs",{"type":7,"value":8,"toc":1136},"minimark",[9,13,18,32,57,87,92,99,104,112,213,221,225,235,240,248,345,352,489,494,658,663,719,742,747,926,932,937,943,1089,1093,1102,1120,1124,1132],[10,11,12],"p",{},"You can call the Capacities API with any HTTP client. We also ship official SDKs that handle authentication headers, request validation, and typed responses.",[14,15,17],"h2",{"id":16},"typescript","TypeScript",[10,19,20,21,31],{},"The TypeScript SDK is published on npm as ",[22,23,27],"a",{"href":24,"rel":25},"https://www.npmjs.com/package/@capacities/api",[26],"nofollow",[28,29,30],"code",{},"@capacities/api",".",[33,34,39],"pre",{"className":35,"code":36,"language":37,"meta":38,"style":38},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install @capacities/api\n","bash","",[28,40,41],{"__ignoreMap":38},[42,43,46,50,54],"span",{"class":44,"line":45},"line",1,[42,47,49],{"class":48},"sBMFI","npm",[42,51,53],{"class":52},"sfazB"," install",[42,55,56],{"class":52}," @capacities/api\n",[10,58,59,60,63,64,67,68,71,72,74,75,78,79,82,83,31],{},"The client sets ",[28,61,62],{},"Authorization"," and ",[28,65,66],{},"X-Capacities-Api-Version"," on every request. Failed responses throw ",[28,69,70],{},"CapacitiesApiError"," with ",[28,73,28],{},", ",[28,76,77],{},"status",", and ",[28,80,81],{},"message"," — see ",[22,84,86],{"href":85},"/api/overview/errors","Errors",[88,89,91],"h3",{"id":90},"authentication","Authentication",[10,93,94,95,98],{},"The SDK supports two authentication methods. Both send a standard ",[28,96,97],{},"Authorization: Bearer \u003Ctoken>"," header.",[100,101,103],"h4",{"id":102},"api-token","API token",[10,105,106,107,111],{},"The simplest option. Generate a token in ",[108,109,110],"strong",{},"Settings > Capacities API"," and pass it directly. Tokens do not expire.",[33,113,116],{"className":114,"code":115,"language":16,"meta":38,"style":38},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { CapacitiesClient } from '@capacities/api'\n\nconst client = new CapacitiesClient({\n  apiToken: process.env.CAPACITIES_API_TOKEN!,\n})\n",[28,117,118,146,153,178,204],{"__ignoreMap":38},[42,119,120,124,128,132,135,138,141,143],{"class":44,"line":45},[42,121,123],{"class":122},"s7zQu","import",[42,125,127],{"class":126},"sMK4o"," {",[42,129,131],{"class":130},"sTEyZ"," CapacitiesClient",[42,133,134],{"class":126}," }",[42,136,137],{"class":122}," from",[42,139,140],{"class":126}," '",[42,142,30],{"class":52},[42,144,145],{"class":126},"'\n",[42,147,149],{"class":44,"line":148},2,[42,150,152],{"emptyLinePlaceholder":151},true,"\n",[42,154,156,160,163,166,169,172,175],{"class":44,"line":155},3,[42,157,159],{"class":158},"spNyl","const",[42,161,162],{"class":130}," client ",[42,164,165],{"class":126},"=",[42,167,168],{"class":126}," new",[42,170,131],{"class":171},"s2Zo4",[42,173,174],{"class":130},"(",[42,176,177],{"class":126},"{\n",[42,179,181,185,188,191,193,196,198,201],{"class":44,"line":180},4,[42,182,184],{"class":183},"swJcz","  apiToken",[42,186,187],{"class":126},":",[42,189,190],{"class":130}," process",[42,192,31],{"class":126},[42,194,195],{"class":130},"env",[42,197,31],{"class":126},[42,199,200],{"class":130},"CAPACITIES_API_TOKEN",[42,202,203],{"class":126},"!,\n",[42,205,207,210],{"class":44,"line":206},5,[42,208,209],{"class":126},"}",[42,211,212],{"class":130},")\n",[10,214,215,216,220],{},"Use this for scripts and server-side automations where a single user's credentials are acceptable. See ",[22,217,219],{"href":218},"/api/overview/authentication#personal-api-token","Personal API token"," for how to generate one.",[100,222,224],{"id":223},"oauth-20","OAuth 2.0",[10,226,227,228,231,232,31],{},"Use this when your product acts on behalf of end users. The SDK manages token refresh automatically. See ",[22,229,224],{"href":230},"/api/overview/authentication#oauth-20"," for the full flow and how to get a ",[28,233,234],{},"client_id",[10,236,237],{},[108,238,239],{},"What you receive after the OAuth flow",[10,241,242,243,247],{},"After a user completes the ",[22,244,246],{"href":245},"/api/overview/authentication#authorization-code-flow-pkce","Authorization Code + PKCE flow",", your server receives:",[33,249,253],{"className":250,"code":251,"language":252,"meta":38,"style":38},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"access_token\": \"eyJ...\",\n  \"refresh_token\": \"abc...\",\n  \"expires_in\": 3600,\n  \"token_type\": \"Bearer\"\n}\n","json",[28,254,255,259,283,303,320,339],{"__ignoreMap":38},[42,256,257],{"class":44,"line":45},[42,258,177],{"class":126},[42,260,261,264,267,270,272,275,278,280],{"class":44,"line":148},[42,262,263],{"class":126},"  \"",[42,265,266],{"class":158},"access_token",[42,268,269],{"class":126},"\"",[42,271,187],{"class":126},[42,273,274],{"class":126}," \"",[42,276,277],{"class":52},"eyJ...",[42,279,269],{"class":126},[42,281,282],{"class":126},",\n",[42,284,285,287,290,292,294,296,299,301],{"class":44,"line":155},[42,286,263],{"class":126},[42,288,289],{"class":158},"refresh_token",[42,291,269],{"class":126},[42,293,187],{"class":126},[42,295,274],{"class":126},[42,297,298],{"class":52},"abc...",[42,300,269],{"class":126},[42,302,282],{"class":126},[42,304,305,307,310,312,314,318],{"class":44,"line":180},[42,306,263],{"class":126},[42,308,309],{"class":158},"expires_in",[42,311,269],{"class":126},[42,313,187],{"class":126},[42,315,317],{"class":316},"sbssI"," 3600",[42,319,282],{"class":126},[42,321,322,324,327,329,331,333,336],{"class":44,"line":206},[42,323,263],{"class":126},[42,325,326],{"class":158},"token_type",[42,328,269],{"class":126},[42,330,187],{"class":126},[42,332,274],{"class":126},[42,334,335],{"class":52},"Bearer",[42,337,338],{"class":126},"\"\n",[42,340,342],{"class":44,"line":341},6,[42,343,344],{"class":126},"}\n",[10,346,347,348,351],{},"Convert this into the ",[28,349,350],{},"OAuthTokens"," shape expected by the SDK:",[33,353,355],{"className":114,"code":354,"language":16,"meta":38,"style":38},"import type { OAuthTokens } from '@capacities/api'\n\nconst tokens: OAuthTokens = {\n  accessToken: data.access_token,\n  refreshToken: data.refresh_token,\n  // Store expiresAt so the SDK can refresh proactively before the token expires.\n  expiresAt: Math.floor(Date.now() / 1000) + data.expires_in,\n}\n",[28,356,357,379,383,400,416,431,437,484],{"__ignoreMap":38},[42,358,359,361,364,366,369,371,373,375,377],{"class":44,"line":45},[42,360,123],{"class":122},[42,362,363],{"class":122}," type",[42,365,127],{"class":126},[42,367,368],{"class":130}," OAuthTokens",[42,370,134],{"class":126},[42,372,137],{"class":122},[42,374,140],{"class":126},[42,376,30],{"class":52},[42,378,145],{"class":126},[42,380,381],{"class":44,"line":148},[42,382,152],{"emptyLinePlaceholder":151},[42,384,385,387,390,392,394,397],{"class":44,"line":155},[42,386,159],{"class":158},[42,388,389],{"class":130}," tokens",[42,391,187],{"class":126},[42,393,368],{"class":48},[42,395,396],{"class":126}," =",[42,398,399],{"class":126}," {\n",[42,401,402,405,407,410,412,414],{"class":44,"line":180},[42,403,404],{"class":183},"  accessToken",[42,406,187],{"class":126},[42,408,409],{"class":130}," data",[42,411,31],{"class":126},[42,413,266],{"class":130},[42,415,282],{"class":126},[42,417,418,421,423,425,427,429],{"class":44,"line":206},[42,419,420],{"class":183},"  refreshToken",[42,422,187],{"class":126},[42,424,409],{"class":130},[42,426,31],{"class":126},[42,428,289],{"class":130},[42,430,282],{"class":126},[42,432,433],{"class":44,"line":341},[42,434,436],{"class":435},"sHwdD","  // Store expiresAt so the SDK can refresh proactively before the token expires.\n",[42,438,440,443,445,448,450,453,456,458,461,464,467,470,473,476,478,480,482],{"class":44,"line":439},7,[42,441,442],{"class":183},"  expiresAt",[42,444,187],{"class":126},[42,446,447],{"class":130}," Math",[42,449,31],{"class":126},[42,451,452],{"class":171},"floor",[42,454,455],{"class":130},"(Date",[42,457,31],{"class":126},[42,459,460],{"class":171},"now",[42,462,463],{"class":130},"() ",[42,465,466],{"class":126},"/",[42,468,469],{"class":316}," 1000",[42,471,472],{"class":130},") ",[42,474,475],{"class":126},"+",[42,477,409],{"class":130},[42,479,31],{"class":126},[42,481,309],{"class":130},[42,483,282],{"class":126},[42,485,487],{"class":44,"line":486},8,[42,488,344],{"class":126},[10,490,491],{},[108,492,493],{},"Initialising the client",[33,495,497],{"className":114,"code":496,"language":16,"meta":38,"style":38},"import { CapacitiesClient } from '@capacities/api'\n\nconst client = new CapacitiesClient({\n  oauth: {\n    tokens,\n    clientId: 'your_client_id',\n    onTokenRefreshed: async (newTokens) => {\n      // Both fields can change on every refresh. Persist the full set.\n      await db.oauthTokens.upsert({ userId, ...newTokens })\n    },\n  },\n})\n",[28,498,499,517,521,537,546,553,570,595,600,639,645,651],{"__ignoreMap":38},[42,500,501,503,505,507,509,511,513,515],{"class":44,"line":45},[42,502,123],{"class":122},[42,504,127],{"class":126},[42,506,131],{"class":130},[42,508,134],{"class":126},[42,510,137],{"class":122},[42,512,140],{"class":126},[42,514,30],{"class":52},[42,516,145],{"class":126},[42,518,519],{"class":44,"line":148},[42,520,152],{"emptyLinePlaceholder":151},[42,522,523,525,527,529,531,533,535],{"class":44,"line":155},[42,524,159],{"class":158},[42,526,162],{"class":130},[42,528,165],{"class":126},[42,530,168],{"class":126},[42,532,131],{"class":171},[42,534,174],{"class":130},[42,536,177],{"class":126},[42,538,539,542,544],{"class":44,"line":180},[42,540,541],{"class":183},"  oauth",[42,543,187],{"class":126},[42,545,399],{"class":126},[42,547,548,551],{"class":44,"line":206},[42,549,550],{"class":130},"    tokens",[42,552,282],{"class":126},[42,554,555,558,560,562,565,568],{"class":44,"line":341},[42,556,557],{"class":183},"    clientId",[42,559,187],{"class":126},[42,561,140],{"class":126},[42,563,564],{"class":52},"your_client_id",[42,566,567],{"class":126},"'",[42,569,282],{"class":126},[42,571,572,575,577,580,583,587,590,593],{"class":44,"line":439},[42,573,574],{"class":171},"    onTokenRefreshed",[42,576,187],{"class":126},[42,578,579],{"class":158}," async",[42,581,582],{"class":126}," (",[42,584,586],{"class":585},"sHdIc","newTokens",[42,588,589],{"class":126},")",[42,591,592],{"class":158}," =>",[42,594,399],{"class":126},[42,596,597],{"class":44,"line":486},[42,598,599],{"class":435},"      // Both fields can change on every refresh. Persist the full set.\n",[42,601,603,606,609,611,614,616,619,621,624,627,630,633,635,637],{"class":44,"line":602},9,[42,604,605],{"class":122},"      await",[42,607,608],{"class":130}," db",[42,610,31],{"class":126},[42,612,613],{"class":130},"oauthTokens",[42,615,31],{"class":126},[42,617,618],{"class":171},"upsert",[42,620,174],{"class":183},[42,622,623],{"class":126},"{",[42,625,626],{"class":130}," userId",[42,628,629],{"class":126},",",[42,631,632],{"class":126}," ...",[42,634,586],{"class":130},[42,636,134],{"class":126},[42,638,212],{"class":183},[42,640,642],{"class":44,"line":641},10,[42,643,644],{"class":126},"    },\n",[42,646,648],{"class":44,"line":647},11,[42,649,650],{"class":126},"  },\n",[42,652,654,656],{"class":44,"line":653},12,[42,655,209],{"class":126},[42,657,212],{"class":130},[10,659,660],{},[108,661,662],{},"How refresh works",[664,665,666,679],"table",{},[667,668,669],"thead",{},[670,671,672,676],"tr",{},[673,674,675],"th",{},"Trigger",[673,677,678],{},"Behaviour",[680,681,682,697,711],"tbody",{},[670,683,684,694],{},[685,686,687,582,690,693],"td",{},[108,688,689],{},"Proactive",[28,691,692],{},"expiresAt"," within 60 s)",[685,695,696],{},"SDK refreshes before sending the next request",[670,698,699,708],{},[685,700,701,704,705,589],{},[108,702,703],{},"Reactive"," (server returns ",[28,706,707],{},"401",[685,709,710],{},"SDK refreshes and retries the request once",[670,712,713,716],{},[685,714,715],{},"Concurrent requests",[685,717,718],{},"A single refresh call is shared; all waiting requests use the new token",[10,720,721,722,725,726,728,729,732,733,735,736,63,739,31],{},"Refresh tokens ",[108,723,724],{},"rotate on every use",": the server returns a new ",[28,727,289],{}," each time. The ",[28,730,731],{},"onTokenRefreshed"," callback receives the complete replacement ",[28,734,350],{}," set. Persist both ",[28,737,738],{},"accessToken",[28,740,741],{},"refreshToken",[10,743,744],{},[108,745,746],{},"Error handling",[33,748,750],{"className":114,"code":749,"language":16,"meta":38,"style":38},"import { CapacitiesOAuthError, CapacitiesApiError } from '@capacities/api'\n\ntry {\n  const space = await client.space.get()\n} catch (err) {\n  if (err instanceof CapacitiesOAuthError) {\n    // Refresh token expired or revoked. Re-initiate the OAuth flow.\n    redirectToOAuthLogin()\n  } else if (err instanceof CapacitiesApiError) {\n    // API-level error (4xx / 5xx). Inspect err.status, err.code, err.message.\n    console.error(err.code, err.message)\n  }\n}\n",[28,751,752,776,780,787,816,828,847,852,859,882,887,916,921],{"__ignoreMap":38},[42,753,754,756,758,761,763,766,768,770,772,774],{"class":44,"line":45},[42,755,123],{"class":122},[42,757,127],{"class":126},[42,759,760],{"class":130}," CapacitiesOAuthError",[42,762,629],{"class":126},[42,764,765],{"class":130}," CapacitiesApiError",[42,767,134],{"class":126},[42,769,137],{"class":122},[42,771,140],{"class":126},[42,773,30],{"class":52},[42,775,145],{"class":126},[42,777,778],{"class":44,"line":148},[42,779,152],{"emptyLinePlaceholder":151},[42,781,782,785],{"class":44,"line":155},[42,783,784],{"class":122},"try",[42,786,399],{"class":126},[42,788,789,792,795,797,800,803,805,808,810,813],{"class":44,"line":180},[42,790,791],{"class":158},"  const",[42,793,794],{"class":130}," space",[42,796,396],{"class":126},[42,798,799],{"class":122}," await",[42,801,802],{"class":130}," client",[42,804,31],{"class":126},[42,806,807],{"class":130},"space",[42,809,31],{"class":126},[42,811,812],{"class":171},"get",[42,814,815],{"class":183},"()\n",[42,817,818,820,823,826],{"class":44,"line":206},[42,819,209],{"class":126},[42,821,822],{"class":122}," catch",[42,824,825],{"class":130}," (err) ",[42,827,177],{"class":126},[42,829,830,833,835,838,841,843,845],{"class":44,"line":341},[42,831,832],{"class":122},"  if",[42,834,582],{"class":183},[42,836,837],{"class":130},"err",[42,839,840],{"class":126}," instanceof",[42,842,760],{"class":48},[42,844,472],{"class":183},[42,846,177],{"class":126},[42,848,849],{"class":44,"line":439},[42,850,851],{"class":435},"    // Refresh token expired or revoked. Re-initiate the OAuth flow.\n",[42,853,854,857],{"class":44,"line":486},[42,855,856],{"class":171},"    redirectToOAuthLogin",[42,858,815],{"class":183},[42,860,861,864,867,870,872,874,876,878,880],{"class":44,"line":602},[42,862,863],{"class":126},"  }",[42,865,866],{"class":122}," else",[42,868,869],{"class":122}," if",[42,871,582],{"class":183},[42,873,837],{"class":130},[42,875,840],{"class":126},[42,877,765],{"class":48},[42,879,472],{"class":183},[42,881,177],{"class":126},[42,883,884],{"class":44,"line":641},[42,885,886],{"class":435},"    // API-level error (4xx / 5xx). Inspect err.status, err.code, err.message.\n",[42,888,889,892,894,897,899,901,903,905,907,910,912,914],{"class":44,"line":647},[42,890,891],{"class":130},"    console",[42,893,31],{"class":126},[42,895,896],{"class":171},"error",[42,898,174],{"class":183},[42,900,837],{"class":130},[42,902,31],{"class":126},[42,904,28],{"class":130},[42,906,629],{"class":126},[42,908,909],{"class":130}," err",[42,911,31],{"class":126},[42,913,81],{"class":130},[42,915,212],{"class":183},[42,917,918],{"class":44,"line":653},[42,919,920],{"class":126},"  }\n",[42,922,924],{"class":44,"line":923},13,[42,925,344],{"class":126},[10,927,928,931],{},[28,929,930],{},"CapacitiesOAuthError"," is thrown when the refresh request itself fails (network error, expired refresh token, revoked connection). Treat it as a signal to start a new authorisation flow.",[10,933,934],{},[108,935,936],{},"Restoring tokens between sessions",[10,938,939,940,942],{},"Store the full ",[28,941,350],{}," object in your database. On each new process or request, restore it:",[33,944,946],{"className":114,"code":945,"language":16,"meta":38,"style":38},"const stored = await db.oauthTokens.findByUserId(userId)\n\nconst client = new CapacitiesClient({\n  oauth: {\n    tokens: stored,\n    clientId: 'your_client_id',\n    onTokenRefreshed: async (newTokens) => {\n      await db.oauthTokens.update({ userId, ...newTokens })\n    },\n  },\n})\n",[28,947,948,973,977,993,1001,1012,1026,1044,1075,1079,1083],{"__ignoreMap":38},[42,949,950,952,955,957,959,961,963,965,967,970],{"class":44,"line":45},[42,951,159],{"class":158},[42,953,954],{"class":130}," stored ",[42,956,165],{"class":126},[42,958,799],{"class":122},[42,960,608],{"class":130},[42,962,31],{"class":126},[42,964,613],{"class":130},[42,966,31],{"class":126},[42,968,969],{"class":171},"findByUserId",[42,971,972],{"class":130},"(userId)\n",[42,974,975],{"class":44,"line":148},[42,976,152],{"emptyLinePlaceholder":151},[42,978,979,981,983,985,987,989,991],{"class":44,"line":155},[42,980,159],{"class":158},[42,982,162],{"class":130},[42,984,165],{"class":126},[42,986,168],{"class":126},[42,988,131],{"class":171},[42,990,174],{"class":130},[42,992,177],{"class":126},[42,994,995,997,999],{"class":44,"line":180},[42,996,541],{"class":183},[42,998,187],{"class":126},[42,1000,399],{"class":126},[42,1002,1003,1005,1007,1010],{"class":44,"line":206},[42,1004,550],{"class":183},[42,1006,187],{"class":126},[42,1008,1009],{"class":130}," stored",[42,1011,282],{"class":126},[42,1013,1014,1016,1018,1020,1022,1024],{"class":44,"line":341},[42,1015,557],{"class":183},[42,1017,187],{"class":126},[42,1019,140],{"class":126},[42,1021,564],{"class":52},[42,1023,567],{"class":126},[42,1025,282],{"class":126},[42,1027,1028,1030,1032,1034,1036,1038,1040,1042],{"class":44,"line":439},[42,1029,574],{"class":171},[42,1031,187],{"class":126},[42,1033,579],{"class":158},[42,1035,582],{"class":126},[42,1037,586],{"class":585},[42,1039,589],{"class":126},[42,1041,592],{"class":158},[42,1043,399],{"class":126},[42,1045,1046,1048,1050,1052,1054,1056,1059,1061,1063,1065,1067,1069,1071,1073],{"class":44,"line":486},[42,1047,605],{"class":122},[42,1049,608],{"class":130},[42,1051,31],{"class":126},[42,1053,613],{"class":130},[42,1055,31],{"class":126},[42,1057,1058],{"class":171},"update",[42,1060,174],{"class":183},[42,1062,623],{"class":126},[42,1064,626],{"class":130},[42,1066,629],{"class":126},[42,1068,632],{"class":126},[42,1070,586],{"class":130},[42,1072,134],{"class":126},[42,1074,212],{"class":183},[42,1076,1077],{"class":44,"line":602},[42,1078,644],{"class":126},[42,1080,1081],{"class":44,"line":641},[42,1082,650],{"class":126},[42,1084,1085,1087],{"class":44,"line":647},[42,1086,209],{"class":126},[42,1088,212],{"class":130},[88,1090,1092],{"id":1091},"examples","Examples",[10,1094,1095],{},[108,1096,1097,1098,31],{},"Request examples for every endpoint live in the ",[22,1099,1101],{"href":1100},"/api/reference","API Reference",[10,1103,1104,1105,1108,1109,1112,1113,74,1116,1119],{},"Open any operation in the reference UI and switch to the ",[108,1106,1107],{},"TypeScript SDK"," code sample. Samples use ",[28,1110,1111],{},"CapacitiesClient"," method names that mirror the REST paths (for example ",[28,1114,1115],{},"capacities.object.get",[28,1117,1118],{},"capacities.blocks.append",").",[14,1121,1123],{"id":1122},"other-languages","Other languages",[10,1125,1126,1127,31],{},"Only the TypeScript SDK is available today. For other stacks, use the reference's examples. You can also request a client library for your language of choice on our ",[22,1128,1131],{"href":1129,"rel":1130},"https://feedback.capacities.io",[26],"feedback board",[1133,1134,1135],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":38,"searchDepth":45,"depth":148,"links":1137},[1138,1142],{"id":16,"depth":148,"text":17,"children":1139},[1140,1141],{"id":90,"depth":155,"text":91},{"id":1091,"depth":155,"text":1092},{"id":1122,"depth":148,"text":1123},"Official client libraries for the Capacities API.","md",null,{},"/api/overview/sdks",{"title":5,"description":1143},"api/1.overview/sdks","AZScFHxf33wWEQ58X2BxHers7l9PMgaOIj7RwbRxwV4",[1152,1156],{"title":1153,"path":1154,"stem":1155,"children":-1},"Rate Limiting","/api/overview/rate-limiting","api/1.overview/rate-limiting",{"title":1157,"path":1158,"stem":1159,"children":-1},"Versioning","/api/overview/versioning","api/1.overview/versioning",1781012285071]