[{"data":1,"prerenderedAt":3071},["ShallowReactive",2],{"docs:guide:api-recipes":3,"docs:nav":2887,"seo-settings":3050},{"value":4},{"slug":5,"path":6,"title":7,"introduction":8,"body":19,"sections":2876,"seo":2883,"publishedAt":2886,"updatedAt":2886},"api-recipes","/docs/guides/api-recipes","Recipes",{"type":9,"children":10},"root",[11],{"type":12,"tag":13,"props":14,"children":15},"element","p",{},[16],{"type":17,"value":18},"text","Complete, copy-ready examples for the jobs people most often build with the API. Each one is short enough to read in a minute and adapt to your own tools.",{"type":20,"value":21,"toc":2868},"minimark",[22,27,39,369,373,376,379,399,1030,1039,1043,1046,1525,1543,1547,1554,2313,2317,2324,2642,2661,2665,2668,2854,2864],[23,24,26],"h2",{"id":25},"a-helper-to-start-from","A helper to start from",[13,28,29,30,34,35,38],{},"The JavaScript recipes use this small helper. It sends a query with its variables and returns ",[31,32,33],"code",{},"data",", or throws with the API's error messages. It needs Node 18 or later, with your key in the ",[31,36,37],{},"SUCCESS_API_KEY"," environment variable.",[40,41,46],"pre",{"className":42,"code":43,"language":44,"meta":45,"style":45},"language-js shiki shiki-themes github-light github-dark","const API_URL = 'https://www.success.co/graphql'\n\nasync function gql(query, variables = {}) {\n  const response = await fetch(API_URL, {\n    method: 'POST',\n    headers: {\n      Authorization: `Bearer ${process.env.SUCCESS_API_KEY}`,\n      'Content-Type': 'application/json',\n    },\n    body: JSON.stringify({ query, variables }),\n  })\n  const body = await response.json()\n  if (!response.ok || body.errors || body.error) {\n    const messages = body.errors?.map((e) => e.message) ?? [body.error ?? response.statusText]\n    throw new Error(`Success.co API: ${messages.join('; ')}`)\n  }\n  return body.data\n}\n","js","",[31,47,48,68,75,107,132,144,150,177,191,197,214,220,241,267,310,348,354,363],{"__ignoreMap":45},[49,50,53,57,61,64],"span",{"class":51,"line":52},"line",1,[49,54,56],{"class":55},"szBVR","const",[49,58,60],{"class":59},"sj4cs"," API_URL",[49,62,63],{"class":55}," =",[49,65,67],{"class":66},"sZZnC"," 'https://www.success.co/graphql'\n",[49,69,71],{"class":51,"line":70},2,[49,72,74],{"emptyLinePlaceholder":73},true,"\n",[49,76,78,81,84,88,92,96,99,102,104],{"class":51,"line":77},3,[49,79,80],{"class":55},"async",[49,82,83],{"class":55}," function",[49,85,87],{"class":86},"sScJk"," gql",[49,89,91],{"class":90},"sVt8B","(",[49,93,95],{"class":94},"s4XuR","query",[49,97,98],{"class":90},", ",[49,100,101],{"class":94},"variables",[49,103,63],{"class":55},[49,105,106],{"class":90}," {}) {\n",[49,108,110,113,116,118,121,124,126,129],{"class":51,"line":109},4,[49,111,112],{"class":55},"  const",[49,114,115],{"class":59}," response",[49,117,63],{"class":55},[49,119,120],{"class":55}," await",[49,122,123],{"class":86}," fetch",[49,125,91],{"class":90},[49,127,128],{"class":59},"API_URL",[49,130,131],{"class":90},", {\n",[49,133,135,138,141],{"class":51,"line":134},5,[49,136,137],{"class":90},"    method: ",[49,139,140],{"class":66},"'POST'",[49,142,143],{"class":90},",\n",[49,145,147],{"class":51,"line":146},6,[49,148,149],{"class":90},"    headers: {\n",[49,151,153,156,159,162,165,168,170,172,175],{"class":51,"line":152},7,[49,154,155],{"class":90},"      Authorization: ",[49,157,158],{"class":66},"`Bearer ${",[49,160,161],{"class":90},"process",[49,163,164],{"class":66},".",[49,166,167],{"class":90},"env",[49,169,164],{"class":66},[49,171,37],{"class":59},[49,173,174],{"class":66},"}`",[49,176,143],{"class":90},[49,178,180,183,186,189],{"class":51,"line":179},8,[49,181,182],{"class":66},"      'Content-Type'",[49,184,185],{"class":90},": ",[49,187,188],{"class":66},"'application/json'",[49,190,143],{"class":90},[49,192,194],{"class":51,"line":193},9,[49,195,196],{"class":90},"    },\n",[49,198,200,203,206,208,211],{"class":51,"line":199},10,[49,201,202],{"class":90},"    body: ",[49,204,205],{"class":59},"JSON",[49,207,164],{"class":90},[49,209,210],{"class":86},"stringify",[49,212,213],{"class":90},"({ query, variables }),\n",[49,215,217],{"class":51,"line":216},11,[49,218,219],{"class":90},"  })\n",[49,221,223,225,228,230,232,235,238],{"class":51,"line":222},12,[49,224,112],{"class":55},[49,226,227],{"class":59}," body",[49,229,63],{"class":55},[49,231,120],{"class":55},[49,233,234],{"class":90}," response.",[49,236,237],{"class":86},"json",[49,239,240],{"class":90},"()\n",[49,242,244,247,250,253,256,259,262,264],{"class":51,"line":243},13,[49,245,246],{"class":55},"  if",[49,248,249],{"class":90}," (",[49,251,252],{"class":55},"!",[49,254,255],{"class":90},"response.ok ",[49,257,258],{"class":55},"||",[49,260,261],{"class":90}," body.errors ",[49,263,258],{"class":55},[49,265,266],{"class":90}," body.error) {\n",[49,268,270,273,276,278,281,284,287,290,293,296,299,302,305,307],{"class":51,"line":269},14,[49,271,272],{"class":55},"    const",[49,274,275],{"class":59}," messages",[49,277,63],{"class":55},[49,279,280],{"class":90}," body.errors?.",[49,282,283],{"class":86},"map",[49,285,286],{"class":90},"((",[49,288,289],{"class":94},"e",[49,291,292],{"class":90},") ",[49,294,295],{"class":55},"=>",[49,297,298],{"class":90}," e.message) ",[49,300,301],{"class":55},"??",[49,303,304],{"class":90}," [body.error ",[49,306,301],{"class":55},[49,308,309],{"class":90}," response.statusText]\n",[49,311,313,316,319,322,324,327,330,332,335,337,340,343,345],{"class":51,"line":312},15,[49,314,315],{"class":55},"    throw",[49,317,318],{"class":55}," new",[49,320,321],{"class":86}," Error",[49,323,91],{"class":90},[49,325,326],{"class":66},"`Success.co API: ${",[49,328,329],{"class":90},"messages",[49,331,164],{"class":66},[49,333,334],{"class":86},"join",[49,336,91],{"class":66},[49,338,339],{"class":66},"'; '",[49,341,342],{"class":66},")",[49,344,174],{"class":66},[49,346,347],{"class":90},")\n",[49,349,351],{"class":51,"line":350},16,[49,352,353],{"class":90},"  }\n",[49,355,357,360],{"class":51,"line":356},17,[49,358,359],{"class":55},"  return",[49,361,362],{"class":90}," body.data\n",[49,364,366],{"class":51,"line":365},18,[49,367,368],{"class":90},"}\n",[23,370,372],{"id":371},"send-a-scorecard-number-every-week","Send a Scorecard number every week",[13,374,375],{},"Push a number from another system (revenue from your accounting tool, tickets closed from your help desk) into a weekly measurable. Run it on a schedule, such as every Monday morning; running it twice in a week just updates the number.",[13,377,378],{},"It does four things:",[380,381,382,386,393,396],"ol",{},[383,384,385],"li",{},"Finds the measurable by name.",[383,387,388,389,392],{},"Works out the Monday that starts the week, which is the ",[31,390,391],{},"startDate"," every weekly value needs.",[383,394,395],{},"Looks for a value already in that week, including a deleted one, as there can only be one per week.",[383,397,398],{},"Updates that value, or creates one if there isn't one.",[40,400,402],{"className":42,"code":401,"language":44,"meta":45,"style":45},"// Monday of the week that contains `date`, as YYYY-MM-DD (UTC)\nfunction mondayOf(date = new Date()) {\n  const d = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()))\n  const daysSinceMonday = (d.getUTCDay() + 6) % 7 // Monday 0 … Sunday 6\n  d.setUTCDate(d.getUTCDate() - daysSinceMonday)\n  return d.toISOString().slice(0, 10)\n}\n\nasync function sendWeeklyNumber(measurableName, value, date = new Date()) {\n  const { dataFields, currentCompanyId } = await gql(\n    `query ($name: String!) {\n      currentCompanyId\n      dataFields(filter: {\n        name: { equalToInsensitive: $name }\n        type: { equalTo: \"WEEKLY\" }\n        stateId: { equalTo: \"ACTIVE\" }\n        dataFieldStatusId: { equalTo: \"ACTIVE\" }\n      }) { nodes { id name } }\n    }`,\n    { name: measurableName },\n  )\n  const measurable = dataFields.nodes[0]\n  if (!measurable) throw new Error(`No active weekly measurable called \"${measurableName}\"`)\n\n  const startDate = mondayOf(date)\n\n  const { dataValues } = await gql(\n    `query ($dataFieldId: UUID!, $startDate: Date!) {\n      dataValues(filter: { dataFieldId: { equalTo: $dataFieldId }, startDate: { equalTo: $startDate } }) {\n        nodes { id }\n      }\n    }`,\n    { dataFieldId: measurable.id, startDate },\n  )\n  const existing = dataValues.nodes[0]\n\n  if (existing) {\n    // Also brings back a value someone deleted in that week\n    await gql(\n      `mutation ($id: UUID!, $value: String!) {\n        updateDataValue(input: { id: $id, patch: { value: $value, stateId: \"ACTIVE\" } }) { dataValue { id } }\n      }`,\n      { id: existing.id, value: String(value) },\n    )\n  } else {\n    await gql(\n      `mutation ($dataValue: DataValueInput!) {\n        createDataValue(input: { dataValue: $dataValue }) { dataValue { id } }\n      }`,\n      { dataValue: { dataFieldId: measurable.id, startDate, value: String(value), companyId: currentCompanyId } },\n    )\n  }\n  console.log(`${measurable.name}: ${value} for the week of ${startDate}`)\n}\n\nawait sendWeeklyNumber('Weekly revenue', 48250)\n",[31,403,404,410,433,472,507,528,556,560,564,595,623,628,633,638,643,648,653,658,663,671,677,683,701,732,737,752,757,777,783,789,795,801,808,814,819,836,841,849,855,865,871,877,885,897,903,915,924,930,936,943,954,959,964,1000,1005,1010],{"__ignoreMap":45},[49,405,406],{"class":51,"line":52},[49,407,409],{"class":408},"sJ8bj","// Monday of the week that contains `date`, as YYYY-MM-DD (UTC)\n",[49,411,412,415,418,420,423,425,427,430],{"class":51,"line":70},[49,413,414],{"class":55},"function",[49,416,417],{"class":86}," mondayOf",[49,419,91],{"class":90},[49,421,422],{"class":94},"date",[49,424,63],{"class":55},[49,426,318],{"class":55},[49,428,429],{"class":86}," Date",[49,431,432],{"class":90},"()) {\n",[49,434,435,437,440,442,444,446,449,452,455,458,461,464,466,469],{"class":51,"line":77},[49,436,112],{"class":55},[49,438,439],{"class":59}," d",[49,441,63],{"class":55},[49,443,318],{"class":55},[49,445,429],{"class":86},[49,447,448],{"class":90},"(Date.",[49,450,451],{"class":86},"UTC",[49,453,454],{"class":90},"(date.",[49,456,457],{"class":86},"getUTCFullYear",[49,459,460],{"class":90},"(), date.",[49,462,463],{"class":86},"getUTCMonth",[49,465,460],{"class":90},[49,467,468],{"class":86},"getUTCDate",[49,470,471],{"class":90},"()))\n",[49,473,474,476,479,481,484,487,490,493,496,498,501,504],{"class":51,"line":109},[49,475,112],{"class":55},[49,477,478],{"class":59}," daysSinceMonday",[49,480,63],{"class":55},[49,482,483],{"class":90}," (d.",[49,485,486],{"class":86},"getUTCDay",[49,488,489],{"class":90},"() ",[49,491,492],{"class":55},"+",[49,494,495],{"class":59}," 6",[49,497,292],{"class":90},[49,499,500],{"class":55},"%",[49,502,503],{"class":59}," 7",[49,505,506],{"class":408}," // Monday 0 … Sunday 6\n",[49,508,509,512,515,518,520,522,525],{"class":51,"line":134},[49,510,511],{"class":90},"  d.",[49,513,514],{"class":86},"setUTCDate",[49,516,517],{"class":90},"(d.",[49,519,468],{"class":86},[49,521,489],{"class":90},[49,523,524],{"class":55},"-",[49,526,527],{"class":90}," daysSinceMonday)\n",[49,529,530,532,535,538,541,544,546,549,551,554],{"class":51,"line":146},[49,531,359],{"class":55},[49,533,534],{"class":90}," d.",[49,536,537],{"class":86},"toISOString",[49,539,540],{"class":90},"().",[49,542,543],{"class":86},"slice",[49,545,91],{"class":90},[49,547,548],{"class":59},"0",[49,550,98],{"class":90},[49,552,553],{"class":59},"10",[49,555,347],{"class":90},[49,557,558],{"class":51,"line":152},[49,559,368],{"class":90},[49,561,562],{"class":51,"line":179},[49,563,74],{"emptyLinePlaceholder":73},[49,565,566,568,570,573,575,578,580,583,585,587,589,591,593],{"class":51,"line":193},[49,567,80],{"class":55},[49,569,83],{"class":55},[49,571,572],{"class":86}," sendWeeklyNumber",[49,574,91],{"class":90},[49,576,577],{"class":94},"measurableName",[49,579,98],{"class":90},[49,581,582],{"class":94},"value",[49,584,98],{"class":90},[49,586,422],{"class":94},[49,588,63],{"class":55},[49,590,318],{"class":55},[49,592,429],{"class":86},[49,594,432],{"class":90},[49,596,597,599,602,605,607,610,613,616,618,620],{"class":51,"line":199},[49,598,112],{"class":55},[49,600,601],{"class":90}," { ",[49,603,604],{"class":59},"dataFields",[49,606,98],{"class":90},[49,608,609],{"class":59},"currentCompanyId",[49,611,612],{"class":90}," } ",[49,614,615],{"class":55},"=",[49,617,120],{"class":55},[49,619,87],{"class":86},[49,621,622],{"class":90},"(\n",[49,624,625],{"class":51,"line":216},[49,626,627],{"class":66},"    `query ($name: String!) {\n",[49,629,630],{"class":51,"line":222},[49,631,632],{"class":66},"      currentCompanyId\n",[49,634,635],{"class":51,"line":243},[49,636,637],{"class":66},"      dataFields(filter: {\n",[49,639,640],{"class":51,"line":269},[49,641,642],{"class":66},"        name: { equalToInsensitive: $name }\n",[49,644,645],{"class":51,"line":312},[49,646,647],{"class":66},"        type: { equalTo: \"WEEKLY\" }\n",[49,649,650],{"class":51,"line":350},[49,651,652],{"class":66},"        stateId: { equalTo: \"ACTIVE\" }\n",[49,654,655],{"class":51,"line":356},[49,656,657],{"class":66},"        dataFieldStatusId: { equalTo: \"ACTIVE\" }\n",[49,659,660],{"class":51,"line":365},[49,661,662],{"class":66},"      }) { nodes { id name } }\n",[49,664,666,669],{"class":51,"line":665},19,[49,667,668],{"class":66},"    }`",[49,670,143],{"class":90},[49,672,674],{"class":51,"line":673},20,[49,675,676],{"class":90},"    { name: measurableName },\n",[49,678,680],{"class":51,"line":679},21,[49,681,682],{"class":90},"  )\n",[49,684,686,688,691,693,696,698],{"class":51,"line":685},22,[49,687,112],{"class":55},[49,689,690],{"class":59}," measurable",[49,692,63],{"class":55},[49,694,695],{"class":90}," dataFields.nodes[",[49,697,548],{"class":59},[49,699,700],{"class":90},"]\n",[49,702,704,706,708,710,713,716,718,720,722,725,727,730],{"class":51,"line":703},23,[49,705,246],{"class":55},[49,707,249],{"class":90},[49,709,252],{"class":55},[49,711,712],{"class":90},"measurable) ",[49,714,715],{"class":55},"throw",[49,717,318],{"class":55},[49,719,321],{"class":86},[49,721,91],{"class":90},[49,723,724],{"class":66},"`No active weekly measurable called \"${",[49,726,577],{"class":90},[49,728,729],{"class":66},"}\"`",[49,731,347],{"class":90},[49,733,735],{"class":51,"line":734},24,[49,736,74],{"emptyLinePlaceholder":73},[49,738,740,742,745,747,749],{"class":51,"line":739},25,[49,741,112],{"class":55},[49,743,744],{"class":59}," startDate",[49,746,63],{"class":55},[49,748,417],{"class":86},[49,750,751],{"class":90},"(date)\n",[49,753,755],{"class":51,"line":754},26,[49,756,74],{"emptyLinePlaceholder":73},[49,758,760,762,764,767,769,771,773,775],{"class":51,"line":759},27,[49,761,112],{"class":55},[49,763,601],{"class":90},[49,765,766],{"class":59},"dataValues",[49,768,612],{"class":90},[49,770,615],{"class":55},[49,772,120],{"class":55},[49,774,87],{"class":86},[49,776,622],{"class":90},[49,778,780],{"class":51,"line":779},28,[49,781,782],{"class":66},"    `query ($dataFieldId: UUID!, $startDate: Date!) {\n",[49,784,786],{"class":51,"line":785},29,[49,787,788],{"class":66},"      dataValues(filter: { dataFieldId: { equalTo: $dataFieldId }, startDate: { equalTo: $startDate } }) {\n",[49,790,792],{"class":51,"line":791},30,[49,793,794],{"class":66},"        nodes { id }\n",[49,796,798],{"class":51,"line":797},31,[49,799,800],{"class":66},"      }\n",[49,802,804,806],{"class":51,"line":803},32,[49,805,668],{"class":66},[49,807,143],{"class":90},[49,809,811],{"class":51,"line":810},33,[49,812,813],{"class":90},"    { dataFieldId: measurable.id, startDate },\n",[49,815,817],{"class":51,"line":816},34,[49,818,682],{"class":90},[49,820,822,824,827,829,832,834],{"class":51,"line":821},35,[49,823,112],{"class":55},[49,825,826],{"class":59}," existing",[49,828,63],{"class":55},[49,830,831],{"class":90}," dataValues.nodes[",[49,833,548],{"class":59},[49,835,700],{"class":90},[49,837,839],{"class":51,"line":838},36,[49,840,74],{"emptyLinePlaceholder":73},[49,842,844,846],{"class":51,"line":843},37,[49,845,246],{"class":55},[49,847,848],{"class":90}," (existing) {\n",[49,850,852],{"class":51,"line":851},38,[49,853,854],{"class":408},"    // Also brings back a value someone deleted in that week\n",[49,856,858,861,863],{"class":51,"line":857},39,[49,859,860],{"class":55},"    await",[49,862,87],{"class":86},[49,864,622],{"class":90},[49,866,868],{"class":51,"line":867},40,[49,869,870],{"class":66},"      `mutation ($id: UUID!, $value: String!) {\n",[49,872,874],{"class":51,"line":873},41,[49,875,876],{"class":66},"        updateDataValue(input: { id: $id, patch: { value: $value, stateId: \"ACTIVE\" } }) { dataValue { id } }\n",[49,878,880,883],{"class":51,"line":879},42,[49,881,882],{"class":66},"      }`",[49,884,143],{"class":90},[49,886,888,891,894],{"class":51,"line":887},43,[49,889,890],{"class":90},"      { id: existing.id, value: ",[49,892,893],{"class":86},"String",[49,895,896],{"class":90},"(value) },\n",[49,898,900],{"class":51,"line":899},44,[49,901,902],{"class":90},"    )\n",[49,904,906,909,912],{"class":51,"line":905},45,[49,907,908],{"class":90},"  } ",[49,910,911],{"class":55},"else",[49,913,914],{"class":90}," {\n",[49,916,918,920,922],{"class":51,"line":917},46,[49,919,860],{"class":55},[49,921,87],{"class":86},[49,923,622],{"class":90},[49,925,927],{"class":51,"line":926},47,[49,928,929],{"class":66},"      `mutation ($dataValue: DataValueInput!) {\n",[49,931,933],{"class":51,"line":932},48,[49,934,935],{"class":66},"        createDataValue(input: { dataValue: $dataValue }) { dataValue { id } }\n",[49,937,939,941],{"class":51,"line":938},49,[49,940,882],{"class":66},[49,942,143],{"class":90},[49,944,946,949,951],{"class":51,"line":945},50,[49,947,948],{"class":90},"      { dataValue: { dataFieldId: measurable.id, startDate, value: ",[49,950,893],{"class":86},[49,952,953],{"class":90},"(value), companyId: currentCompanyId } },\n",[49,955,957],{"class":51,"line":956},51,[49,958,902],{"class":90},[49,960,962],{"class":51,"line":961},52,[49,963,353],{"class":90},[49,965,967,970,973,975,978,981,983,986,989,991,994,996,998],{"class":51,"line":966},53,[49,968,969],{"class":90},"  console.",[49,971,972],{"class":86},"log",[49,974,91],{"class":90},[49,976,977],{"class":66},"`${",[49,979,980],{"class":90},"measurable",[49,982,164],{"class":66},[49,984,985],{"class":90},"name",[49,987,988],{"class":66},"}: ${",[49,990,582],{"class":90},[49,992,993],{"class":66},"} for the week of ${",[49,995,391],{"class":90},[49,997,174],{"class":66},[49,999,347],{"class":90},[49,1001,1003],{"class":51,"line":1002},54,[49,1004,368],{"class":90},[49,1006,1008],{"class":51,"line":1007},55,[49,1009,74],{"emptyLinePlaceholder":73},[49,1011,1013,1016,1018,1020,1023,1025,1028],{"class":51,"line":1012},56,[49,1014,1015],{"class":55},"await",[49,1017,572],{"class":86},[49,1019,91],{"class":90},[49,1021,1022],{"class":66},"'Weekly revenue'",[49,1024,98],{"class":90},[49,1026,1027],{"class":59},"48250",[49,1029,347],{"class":90},[13,1031,1032,1033,1035,1036,164],{},"For monthly measurables the ",[31,1034,391],{}," is the 1st of the month, and for annual ones 1 January. Quarterly measurables use your company's quarter start dates, which you can read with ",[31,1037,1038],{},"company(id: \"...\") { quarterOneDate quarterTwoDate quarterThreeDate quarterFourDate }",[23,1040,1042],{"id":1041},"create-an-issue-from-another-tool","Create an Issue from another tool",[13,1044,1045],{},"Raise an Issue on a team's list when something happens elsewhere, such as an urgent support ticket or a failed payment. This finds the team by name and the owner by email, then creates the Issue on the short-term list.",[40,1047,1049],{"className":42,"code":1048,"language":44,"meta":45,"style":45},"async function raiseIssue({ teamName, ownerEmail, title, details = '' }) {\n  const { teams, users, currentCompanyId } = await gql(\n    `query ($team: String!, $email: String!) {\n      currentCompanyId\n      teams(filter: { name: { equalToInsensitive: $team }, stateId: { equalTo: \"ACTIVE\" } }) { nodes { id } }\n      users(filter: { email: { equalToInsensitive: $email }, stateId: { equalTo: \"ACTIVE\" } }) { nodes { id } }\n    }`,\n    { team: teamName, email: ownerEmail },\n  )\n  if (!teams.nodes[0]) throw new Error(`No team called \"${teamName}\"`)\n  if (!users.nodes[0]) throw new Error(`No user with the email ${ownerEmail}`)\n\n  const { createIssue } = await gql(\n    `mutation ($issue: IssueInput!) {\n      createIssue(input: { issue: $issue }) { issue { id number } }\n    }`,\n    {\n      issue: {\n        name: title,\n        desc: details ? `\u003Cp>${escapeHtml(details)}\u003C/p>` : '',\n        teamId: teams.nodes[0].id,\n        userId: users.nodes[0].id,\n        type: 'short-term',\n        companyId: currentCompanyId,\n      },\n    },\n  )\n  return createIssue.issue\n}\n\nfunction escapeHtml(text) {\n  return text.replace(/[&\u003C>\"']/g, (c) => ({ '&': '&amp;', '\u003C': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' })[c])\n}\n\nawait raiseIssue({\n  teamName: 'Leadership Team',\n  ownerEmail: 'sam@example.com',\n  title: 'Three enterprise renewals at risk this month',\n  details: 'Flagged by the CRM health check.',\n})\n",[31,1050,1051,1089,1117,1122,1126,1131,1136,1142,1147,1151,1184,1216,1220,1239,1244,1249,1255,1260,1265,1270,1300,1310,1319,1329,1334,1339,1343,1347,1354,1358,1362,1376,1463,1467,1471,1480,1490,1500,1510,1520],{"__ignoreMap":45},[49,1052,1053,1055,1057,1060,1063,1066,1068,1071,1073,1076,1078,1081,1083,1086],{"class":51,"line":52},[49,1054,80],{"class":55},[49,1056,83],{"class":55},[49,1058,1059],{"class":86}," raiseIssue",[49,1061,1062],{"class":90},"({ ",[49,1064,1065],{"class":94},"teamName",[49,1067,98],{"class":90},[49,1069,1070],{"class":94},"ownerEmail",[49,1072,98],{"class":90},[49,1074,1075],{"class":94},"title",[49,1077,98],{"class":90},[49,1079,1080],{"class":94},"details",[49,1082,63],{"class":55},[49,1084,1085],{"class":66}," ''",[49,1087,1088],{"class":90}," }) {\n",[49,1090,1091,1093,1095,1098,1100,1103,1105,1107,1109,1111,1113,1115],{"class":51,"line":70},[49,1092,112],{"class":55},[49,1094,601],{"class":90},[49,1096,1097],{"class":59},"teams",[49,1099,98],{"class":90},[49,1101,1102],{"class":59},"users",[49,1104,98],{"class":90},[49,1106,609],{"class":59},[49,1108,612],{"class":90},[49,1110,615],{"class":55},[49,1112,120],{"class":55},[49,1114,87],{"class":86},[49,1116,622],{"class":90},[49,1118,1119],{"class":51,"line":77},[49,1120,1121],{"class":66},"    `query ($team: String!, $email: String!) {\n",[49,1123,1124],{"class":51,"line":109},[49,1125,632],{"class":66},[49,1127,1128],{"class":51,"line":134},[49,1129,1130],{"class":66},"      teams(filter: { name: { equalToInsensitive: $team }, stateId: { equalTo: \"ACTIVE\" } }) { nodes { id } }\n",[49,1132,1133],{"class":51,"line":146},[49,1134,1135],{"class":66},"      users(filter: { email: { equalToInsensitive: $email }, stateId: { equalTo: \"ACTIVE\" } }) { nodes { id } }\n",[49,1137,1138,1140],{"class":51,"line":152},[49,1139,668],{"class":66},[49,1141,143],{"class":90},[49,1143,1144],{"class":51,"line":179},[49,1145,1146],{"class":90},"    { team: teamName, email: ownerEmail },\n",[49,1148,1149],{"class":51,"line":193},[49,1150,682],{"class":90},[49,1152,1153,1155,1157,1159,1162,1164,1167,1169,1171,1173,1175,1178,1180,1182],{"class":51,"line":199},[49,1154,246],{"class":55},[49,1156,249],{"class":90},[49,1158,252],{"class":55},[49,1160,1161],{"class":90},"teams.nodes[",[49,1163,548],{"class":59},[49,1165,1166],{"class":90},"]) ",[49,1168,715],{"class":55},[49,1170,318],{"class":55},[49,1172,321],{"class":86},[49,1174,91],{"class":90},[49,1176,1177],{"class":66},"`No team called \"${",[49,1179,1065],{"class":90},[49,1181,729],{"class":66},[49,1183,347],{"class":90},[49,1185,1186,1188,1190,1192,1195,1197,1199,1201,1203,1205,1207,1210,1212,1214],{"class":51,"line":216},[49,1187,246],{"class":55},[49,1189,249],{"class":90},[49,1191,252],{"class":55},[49,1193,1194],{"class":90},"users.nodes[",[49,1196,548],{"class":59},[49,1198,1166],{"class":90},[49,1200,715],{"class":55},[49,1202,318],{"class":55},[49,1204,321],{"class":86},[49,1206,91],{"class":90},[49,1208,1209],{"class":66},"`No user with the email ${",[49,1211,1070],{"class":90},[49,1213,174],{"class":66},[49,1215,347],{"class":90},[49,1217,1218],{"class":51,"line":222},[49,1219,74],{"emptyLinePlaceholder":73},[49,1221,1222,1224,1226,1229,1231,1233,1235,1237],{"class":51,"line":243},[49,1223,112],{"class":55},[49,1225,601],{"class":90},[49,1227,1228],{"class":59},"createIssue",[49,1230,612],{"class":90},[49,1232,615],{"class":55},[49,1234,120],{"class":55},[49,1236,87],{"class":86},[49,1238,622],{"class":90},[49,1240,1241],{"class":51,"line":269},[49,1242,1243],{"class":66},"    `mutation ($issue: IssueInput!) {\n",[49,1245,1246],{"class":51,"line":312},[49,1247,1248],{"class":66},"      createIssue(input: { issue: $issue }) { issue { id number } }\n",[49,1250,1251,1253],{"class":51,"line":350},[49,1252,668],{"class":66},[49,1254,143],{"class":90},[49,1256,1257],{"class":51,"line":356},[49,1258,1259],{"class":90},"    {\n",[49,1261,1262],{"class":51,"line":365},[49,1263,1264],{"class":90},"      issue: {\n",[49,1266,1267],{"class":51,"line":665},[49,1268,1269],{"class":90},"        name: title,\n",[49,1271,1272,1275,1278,1281,1284,1286,1288,1290,1293,1296,1298],{"class":51,"line":673},[49,1273,1274],{"class":90},"        desc: details ",[49,1276,1277],{"class":55},"?",[49,1279,1280],{"class":66}," `\u003Cp>${",[49,1282,1283],{"class":86},"escapeHtml",[49,1285,91],{"class":66},[49,1287,1080],{"class":90},[49,1289,342],{"class":66},[49,1291,1292],{"class":66},"}\u003C/p>`",[49,1294,1295],{"class":55}," :",[49,1297,1085],{"class":66},[49,1299,143],{"class":90},[49,1301,1302,1305,1307],{"class":51,"line":679},[49,1303,1304],{"class":90},"        teamId: teams.nodes[",[49,1306,548],{"class":59},[49,1308,1309],{"class":90},"].id,\n",[49,1311,1312,1315,1317],{"class":51,"line":685},[49,1313,1314],{"class":90},"        userId: users.nodes[",[49,1316,548],{"class":59},[49,1318,1309],{"class":90},[49,1320,1321,1324,1327],{"class":51,"line":703},[49,1322,1323],{"class":90},"        type: ",[49,1325,1326],{"class":66},"'short-term'",[49,1328,143],{"class":90},[49,1330,1331],{"class":51,"line":734},[49,1332,1333],{"class":90},"        companyId: currentCompanyId,\n",[49,1335,1336],{"class":51,"line":739},[49,1337,1338],{"class":90},"      },\n",[49,1340,1341],{"class":51,"line":754},[49,1342,196],{"class":90},[49,1344,1345],{"class":51,"line":759},[49,1346,682],{"class":90},[49,1348,1349,1351],{"class":51,"line":779},[49,1350,359],{"class":55},[49,1352,1353],{"class":90}," createIssue.issue\n",[49,1355,1356],{"class":51,"line":785},[49,1357,368],{"class":90},[49,1359,1360],{"class":51,"line":791},[49,1361,74],{"emptyLinePlaceholder":73},[49,1363,1364,1366,1369,1371,1373],{"class":51,"line":797},[49,1365,414],{"class":55},[49,1367,1368],{"class":86}," escapeHtml",[49,1370,91],{"class":90},[49,1372,17],{"class":94},[49,1374,1375],{"class":90},") {\n",[49,1377,1378,1380,1383,1386,1388,1391,1394,1396,1399,1402,1405,1407,1409,1412,1415,1417,1420,1422,1425,1427,1430,1432,1435,1437,1440,1442,1445,1447,1450,1452,1455,1457,1460],{"class":51,"line":803},[49,1379,359],{"class":55},[49,1381,1382],{"class":90}," text.",[49,1384,1385],{"class":86},"replace",[49,1387,91],{"class":90},[49,1389,1390],{"class":66},"/",[49,1392,1393],{"class":59},"[&\u003C>\"']",[49,1395,1390],{"class":66},[49,1397,1398],{"class":55},"g",[49,1400,1401],{"class":90},", (",[49,1403,1404],{"class":94},"c",[49,1406,292],{"class":90},[49,1408,295],{"class":55},[49,1410,1411],{"class":90}," ({ ",[49,1413,1414],{"class":66},"'&'",[49,1416,185],{"class":90},[49,1418,1419],{"class":66},"'&amp;'",[49,1421,98],{"class":90},[49,1423,1424],{"class":66},"'\u003C'",[49,1426,185],{"class":90},[49,1428,1429],{"class":66},"'&lt;'",[49,1431,98],{"class":90},[49,1433,1434],{"class":66},"'>'",[49,1436,185],{"class":90},[49,1438,1439],{"class":66},"'&gt;'",[49,1441,98],{"class":90},[49,1443,1444],{"class":66},"'\"'",[49,1446,185],{"class":90},[49,1448,1449],{"class":66},"'&quot;'",[49,1451,98],{"class":90},[49,1453,1454],{"class":66},"\"'\"",[49,1456,185],{"class":90},[49,1458,1459],{"class":66},"'&#39;'",[49,1461,1462],{"class":90}," })[c])\n",[49,1464,1465],{"class":51,"line":810},[49,1466,368],{"class":90},[49,1468,1469],{"class":51,"line":816},[49,1470,74],{"emptyLinePlaceholder":73},[49,1472,1473,1475,1477],{"class":51,"line":821},[49,1474,1015],{"class":55},[49,1476,1059],{"class":86},[49,1478,1479],{"class":90},"({\n",[49,1481,1482,1485,1488],{"class":51,"line":838},[49,1483,1484],{"class":90},"  teamName: ",[49,1486,1487],{"class":66},"'Leadership Team'",[49,1489,143],{"class":90},[49,1491,1492,1495,1498],{"class":51,"line":843},[49,1493,1494],{"class":90},"  ownerEmail: ",[49,1496,1497],{"class":66},"'sam@example.com'",[49,1499,143],{"class":90},[49,1501,1502,1505,1508],{"class":51,"line":851},[49,1503,1504],{"class":90},"  title: ",[49,1506,1507],{"class":66},"'Three enterprise renewals at risk this month'",[49,1509,143],{"class":90},[49,1511,1512,1515,1518],{"class":51,"line":857},[49,1513,1514],{"class":90},"  details: ",[49,1516,1517],{"class":66},"'Flagged by the CRM health check.'",[49,1519,143],{"class":90},[49,1521,1522],{"class":51,"line":867},[49,1523,1524],{"class":90},"})\n",[13,1526,1527,1528,1533,1534,1537,1538,1542],{},"The key's owner needs access to that team, just as in the app; if they don't have it, the API refuses the change (see ",[1529,1530,1532],"a",{"href":1531},"/docs/guides/api-errors-and-limits#common-errors","Errors and limits","). To create To-dos instead, the same pattern works with ",[31,1535,1536],{},"createTodo","; see ",[1529,1539,1541],{"href":1540},"/docs/guides/api-data-model#to-dos","Data model"," for its required fields.",[23,1544,1546],{"id":1545},"export-a-teams-rocks","Export a team's Rocks",[13,1548,1549,1550,1553],{},"Pull a team's current Rocks, with their owners, statuses and Milestones, into a CSV file for a board pack or a BI tool. This one is in Python and uses the ",[31,1551,1552],{},"requests"," library.",[40,1555,1559],{"className":1556,"code":1557,"language":1558,"meta":45,"style":45},"language-python shiki shiki-themes github-light github-dark","import csv\nimport os\nimport requests\n\nAPI_URL = \"https://www.success.co/graphql\"\nHEADERS = {\"Authorization\": f\"Bearer {os.environ['SUCCESS_API_KEY']}\"}\n\n\ndef gql(query, variables=None):\n    body = requests.post(API_URL, headers=HEADERS, json={\"query\": query, \"variables\": variables or {}}).json()\n    if \"errors\" in body or \"error\" in body:\n        raise RuntimeError(body.get(\"errors\") or body.get(\"error\"))\n    return body[\"data\"]\n\n\nteam = gql(\n    \"\"\"query ($name: String!) {\n      teams(filter: { name: { equalToInsensitive: $name }, stateId: { equalTo: \"ACTIVE\" } }) { nodes { id } }\n    }\"\"\",\n    {\"name\": \"Leadership Team\"},\n)[\"teams\"][\"nodes\"][0]\n\nlinks = gql(\n    \"\"\"query ($teamId: UUID!) {\n      teamsOnRocks(filter: { teamId: { equalTo: $teamId }, stateId: { equalTo: \"ACTIVE\" } }) { nodes { rockId } }\n    }\"\"\",\n    {\"teamId\": team[\"id\"]},\n)[\"teamsOnRocks\"][\"nodes\"]\n\nrocks = gql(\n    \"\"\"query ($ids: [UUID!]) {\n      rocks(\n        filter: { id: { in: $ids }, stateId: { equalTo: \"ACTIVE\" }, isArchived: { equalTo: false } }\n        orderBy: DUE_DATE_ASC\n      ) {\n        nodes {\n          name\n          dueDate\n          rockStatus { name }\n          user { firstName lastName }\n          milestones(filter: { stateId: { equalTo: \"ACTIVE\" } }) { nodes { milestoneStatusId } }\n        }\n      }\n    }\"\"\",\n    {\"ids\": [link[\"rockId\"] for link in links]},\n)[\"rocks\"][\"nodes\"]\n\nwith open(\"rocks.csv\", \"w\", newline=\"\") as f:\n    writer = csv.writer(f)\n    writer.writerow([\"Rock\", \"Owner\", \"Due\", \"Status\", \"Milestones done\"])\n    for rock in rocks:\n        milestones = rock[\"milestones\"][\"nodes\"]\n        done = sum(1 for m in milestones if m[\"milestoneStatusId\"] == \"COMPLETE\")\n        owner = f\"{rock['user']['firstName']} {rock['user']['lastName']}\"\n        writer.writerow([rock[\"name\"], owner, rock[\"dueDate\"], rock[\"rockStatus\"][\"name\"], f\"{done} of {len(milestones)}\"])\n\nprint(f\"Wrote {len(rocks)} Rocks to rocks.csv\")\n","python",[31,1560,1561,1569,1576,1583,1587,1596,1637,1641,1645,1663,1710,1734,1761,1774,1778,1782,1792,1797,1802,1809,1825,1845,1849,1858,1863,1868,1874,1890,1903,1907,1916,1921,1926,1931,1936,1941,1946,1951,1956,1961,1966,1971,1976,1980,1986,2014,2027,2031,2067,2077,2108,2121,2140,2185,2232,2284,2288],{"__ignoreMap":45},[49,1562,1563,1566],{"class":51,"line":52},[49,1564,1565],{"class":55},"import",[49,1567,1568],{"class":90}," csv\n",[49,1570,1571,1573],{"class":51,"line":70},[49,1572,1565],{"class":55},[49,1574,1575],{"class":90}," os\n",[49,1577,1578,1580],{"class":51,"line":77},[49,1579,1565],{"class":55},[49,1581,1582],{"class":90}," requests\n",[49,1584,1585],{"class":51,"line":109},[49,1586,74],{"emptyLinePlaceholder":73},[49,1588,1589,1591,1593],{"class":51,"line":134},[49,1590,128],{"class":59},[49,1592,63],{"class":55},[49,1594,1595],{"class":66}," \"https://www.success.co/graphql\"\n",[49,1597,1598,1601,1603,1606,1609,1611,1614,1617,1620,1623,1626,1629,1632,1635],{"class":51,"line":146},[49,1599,1600],{"class":59},"HEADERS",[49,1602,63],{"class":55},[49,1604,1605],{"class":90}," {",[49,1607,1608],{"class":66},"\"Authorization\"",[49,1610,185],{"class":90},[49,1612,1613],{"class":55},"f",[49,1615,1616],{"class":66},"\"Bearer ",[49,1618,1619],{"class":59},"{",[49,1621,1622],{"class":90},"os.environ[",[49,1624,1625],{"class":66},"'SUCCESS_API_KEY'",[49,1627,1628],{"class":90},"]",[49,1630,1631],{"class":59},"}",[49,1633,1634],{"class":66},"\"",[49,1636,368],{"class":90},[49,1638,1639],{"class":51,"line":152},[49,1640,74],{"emptyLinePlaceholder":73},[49,1642,1643],{"class":51,"line":179},[49,1644,74],{"emptyLinePlaceholder":73},[49,1646,1647,1650,1652,1655,1657,1660],{"class":51,"line":193},[49,1648,1649],{"class":55},"def",[49,1651,87],{"class":86},[49,1653,1654],{"class":90},"(query, variables",[49,1656,615],{"class":55},[49,1658,1659],{"class":59},"None",[49,1661,1662],{"class":90},"):\n",[49,1664,1665,1668,1670,1673,1675,1677,1680,1682,1684,1686,1688,1690,1692,1695,1698,1701,1704,1707],{"class":51,"line":199},[49,1666,1667],{"class":90},"    body ",[49,1669,615],{"class":55},[49,1671,1672],{"class":90}," requests.post(",[49,1674,128],{"class":59},[49,1676,98],{"class":90},[49,1678,1679],{"class":94},"headers",[49,1681,615],{"class":55},[49,1683,1600],{"class":59},[49,1685,98],{"class":90},[49,1687,237],{"class":94},[49,1689,615],{"class":55},[49,1691,1619],{"class":90},[49,1693,1694],{"class":66},"\"query\"",[49,1696,1697],{"class":90},": query, ",[49,1699,1700],{"class":66},"\"variables\"",[49,1702,1703],{"class":90},": variables ",[49,1705,1706],{"class":55},"or",[49,1708,1709],{"class":90}," {}}).json()\n",[49,1711,1712,1715,1718,1721,1724,1726,1729,1731],{"class":51,"line":216},[49,1713,1714],{"class":55},"    if",[49,1716,1717],{"class":66}," \"errors\"",[49,1719,1720],{"class":55}," in",[49,1722,1723],{"class":90}," body ",[49,1725,1706],{"class":55},[49,1727,1728],{"class":66}," \"error\"",[49,1730,1720],{"class":55},[49,1732,1733],{"class":90}," body:\n",[49,1735,1736,1739,1742,1745,1748,1750,1752,1755,1758],{"class":51,"line":222},[49,1737,1738],{"class":55},"        raise",[49,1740,1741],{"class":59}," RuntimeError",[49,1743,1744],{"class":90},"(body.get(",[49,1746,1747],{"class":66},"\"errors\"",[49,1749,292],{"class":90},[49,1751,1706],{"class":55},[49,1753,1754],{"class":90}," body.get(",[49,1756,1757],{"class":66},"\"error\"",[49,1759,1760],{"class":90},"))\n",[49,1762,1763,1766,1769,1772],{"class":51,"line":243},[49,1764,1765],{"class":55},"    return",[49,1767,1768],{"class":90}," body[",[49,1770,1771],{"class":66},"\"data\"",[49,1773,700],{"class":90},[49,1775,1776],{"class":51,"line":269},[49,1777,74],{"emptyLinePlaceholder":73},[49,1779,1780],{"class":51,"line":312},[49,1781,74],{"emptyLinePlaceholder":73},[49,1783,1784,1787,1789],{"class":51,"line":350},[49,1785,1786],{"class":90},"team ",[49,1788,615],{"class":55},[49,1790,1791],{"class":90}," gql(\n",[49,1793,1794],{"class":51,"line":356},[49,1795,1796],{"class":66},"    \"\"\"query ($name: String!) {\n",[49,1798,1799],{"class":51,"line":365},[49,1800,1801],{"class":66},"      teams(filter: { name: { equalToInsensitive: $name }, stateId: { equalTo: \"ACTIVE\" } }) { nodes { id } }\n",[49,1803,1804,1807],{"class":51,"line":665},[49,1805,1806],{"class":66},"    }\"\"\"",[49,1808,143],{"class":90},[49,1810,1811,1814,1817,1819,1822],{"class":51,"line":673},[49,1812,1813],{"class":90},"    {",[49,1815,1816],{"class":66},"\"name\"",[49,1818,185],{"class":90},[49,1820,1821],{"class":66},"\"Leadership Team\"",[49,1823,1824],{"class":90},"},\n",[49,1826,1827,1830,1833,1836,1839,1841,1843],{"class":51,"line":679},[49,1828,1829],{"class":90},")[",[49,1831,1832],{"class":66},"\"teams\"",[49,1834,1835],{"class":90},"][",[49,1837,1838],{"class":66},"\"nodes\"",[49,1840,1835],{"class":90},[49,1842,548],{"class":59},[49,1844,700],{"class":90},[49,1846,1847],{"class":51,"line":685},[49,1848,74],{"emptyLinePlaceholder":73},[49,1850,1851,1854,1856],{"class":51,"line":703},[49,1852,1853],{"class":90},"links ",[49,1855,615],{"class":55},[49,1857,1791],{"class":90},[49,1859,1860],{"class":51,"line":734},[49,1861,1862],{"class":66},"    \"\"\"query ($teamId: UUID!) {\n",[49,1864,1865],{"class":51,"line":739},[49,1866,1867],{"class":66},"      teamsOnRocks(filter: { teamId: { equalTo: $teamId }, stateId: { equalTo: \"ACTIVE\" } }) { nodes { rockId } }\n",[49,1869,1870,1872],{"class":51,"line":754},[49,1871,1806],{"class":66},[49,1873,143],{"class":90},[49,1875,1876,1878,1881,1884,1887],{"class":51,"line":759},[49,1877,1813],{"class":90},[49,1879,1880],{"class":66},"\"teamId\"",[49,1882,1883],{"class":90},": team[",[49,1885,1886],{"class":66},"\"id\"",[49,1888,1889],{"class":90},"]},\n",[49,1891,1892,1894,1897,1899,1901],{"class":51,"line":779},[49,1893,1829],{"class":90},[49,1895,1896],{"class":66},"\"teamsOnRocks\"",[49,1898,1835],{"class":90},[49,1900,1838],{"class":66},[49,1902,700],{"class":90},[49,1904,1905],{"class":51,"line":785},[49,1906,74],{"emptyLinePlaceholder":73},[49,1908,1909,1912,1914],{"class":51,"line":791},[49,1910,1911],{"class":90},"rocks ",[49,1913,615],{"class":55},[49,1915,1791],{"class":90},[49,1917,1918],{"class":51,"line":797},[49,1919,1920],{"class":66},"    \"\"\"query ($ids: [UUID!]) {\n",[49,1922,1923],{"class":51,"line":803},[49,1924,1925],{"class":66},"      rocks(\n",[49,1927,1928],{"class":51,"line":810},[49,1929,1930],{"class":66},"        filter: { id: { in: $ids }, stateId: { equalTo: \"ACTIVE\" }, isArchived: { equalTo: false } }\n",[49,1932,1933],{"class":51,"line":816},[49,1934,1935],{"class":66},"        orderBy: DUE_DATE_ASC\n",[49,1937,1938],{"class":51,"line":821},[49,1939,1940],{"class":66},"      ) {\n",[49,1942,1943],{"class":51,"line":838},[49,1944,1945],{"class":66},"        nodes {\n",[49,1947,1948],{"class":51,"line":843},[49,1949,1950],{"class":66},"          name\n",[49,1952,1953],{"class":51,"line":851},[49,1954,1955],{"class":66},"          dueDate\n",[49,1957,1958],{"class":51,"line":857},[49,1959,1960],{"class":66},"          rockStatus { name }\n",[49,1962,1963],{"class":51,"line":867},[49,1964,1965],{"class":66},"          user { firstName lastName }\n",[49,1967,1968],{"class":51,"line":873},[49,1969,1970],{"class":66},"          milestones(filter: { stateId: { equalTo: \"ACTIVE\" } }) { nodes { milestoneStatusId } }\n",[49,1972,1973],{"class":51,"line":879},[49,1974,1975],{"class":66},"        }\n",[49,1977,1978],{"class":51,"line":887},[49,1979,800],{"class":66},[49,1981,1982,1984],{"class":51,"line":899},[49,1983,1806],{"class":66},[49,1985,143],{"class":90},[49,1987,1988,1990,1993,1996,1999,2002,2005,2008,2011],{"class":51,"line":905},[49,1989,1813],{"class":90},[49,1991,1992],{"class":66},"\"ids\"",[49,1994,1995],{"class":90},": [link[",[49,1997,1998],{"class":66},"\"rockId\"",[49,2000,2001],{"class":90},"] ",[49,2003,2004],{"class":55},"for",[49,2006,2007],{"class":90}," link ",[49,2009,2010],{"class":55},"in",[49,2012,2013],{"class":90}," links]},\n",[49,2015,2016,2018,2021,2023,2025],{"class":51,"line":917},[49,2017,1829],{"class":90},[49,2019,2020],{"class":66},"\"rocks\"",[49,2022,1835],{"class":90},[49,2024,1838],{"class":66},[49,2026,700],{"class":90},[49,2028,2029],{"class":51,"line":926},[49,2030,74],{"emptyLinePlaceholder":73},[49,2032,2033,2036,2039,2041,2044,2046,2049,2051,2054,2056,2059,2061,2064],{"class":51,"line":932},[49,2034,2035],{"class":55},"with",[49,2037,2038],{"class":59}," open",[49,2040,91],{"class":90},[49,2042,2043],{"class":66},"\"rocks.csv\"",[49,2045,98],{"class":90},[49,2047,2048],{"class":66},"\"w\"",[49,2050,98],{"class":90},[49,2052,2053],{"class":94},"newline",[49,2055,615],{"class":55},[49,2057,2058],{"class":66},"\"\"",[49,2060,292],{"class":90},[49,2062,2063],{"class":55},"as",[49,2065,2066],{"class":90}," f:\n",[49,2068,2069,2072,2074],{"class":51,"line":938},[49,2070,2071],{"class":90},"    writer ",[49,2073,615],{"class":55},[49,2075,2076],{"class":90}," csv.writer(f)\n",[49,2078,2079,2082,2085,2087,2090,2092,2095,2097,2100,2102,2105],{"class":51,"line":945},[49,2080,2081],{"class":90},"    writer.writerow([",[49,2083,2084],{"class":66},"\"Rock\"",[49,2086,98],{"class":90},[49,2088,2089],{"class":66},"\"Owner\"",[49,2091,98],{"class":90},[49,2093,2094],{"class":66},"\"Due\"",[49,2096,98],{"class":90},[49,2098,2099],{"class":66},"\"Status\"",[49,2101,98],{"class":90},[49,2103,2104],{"class":66},"\"Milestones done\"",[49,2106,2107],{"class":90},"])\n",[49,2109,2110,2113,2116,2118],{"class":51,"line":956},[49,2111,2112],{"class":55},"    for",[49,2114,2115],{"class":90}," rock ",[49,2117,2010],{"class":55},[49,2119,2120],{"class":90}," rocks:\n",[49,2122,2123,2126,2128,2131,2134,2136,2138],{"class":51,"line":961},[49,2124,2125],{"class":90},"        milestones ",[49,2127,615],{"class":55},[49,2129,2130],{"class":90}," rock[",[49,2132,2133],{"class":66},"\"milestones\"",[49,2135,1835],{"class":90},[49,2137,1838],{"class":66},[49,2139,700],{"class":90},[49,2141,2142,2145,2147,2150,2152,2155,2158,2161,2163,2166,2169,2172,2175,2177,2180,2183],{"class":51,"line":966},[49,2143,2144],{"class":90},"        done ",[49,2146,615],{"class":55},[49,2148,2149],{"class":59}," sum",[49,2151,91],{"class":90},[49,2153,2154],{"class":59},"1",[49,2156,2157],{"class":55}," for",[49,2159,2160],{"class":90}," m ",[49,2162,2010],{"class":55},[49,2164,2165],{"class":90}," milestones ",[49,2167,2168],{"class":55},"if",[49,2170,2171],{"class":90}," m[",[49,2173,2174],{"class":66},"\"milestoneStatusId\"",[49,2176,2001],{"class":90},[49,2178,2179],{"class":55},"==",[49,2181,2182],{"class":66}," \"COMPLETE\"",[49,2184,347],{"class":90},[49,2186,2187,2190,2192,2195,2197,2199,2202,2205,2207,2210,2212,2214,2216,2218,2220,2222,2225,2227,2229],{"class":51,"line":1002},[49,2188,2189],{"class":90},"        owner ",[49,2191,615],{"class":55},[49,2193,2194],{"class":55}," f",[49,2196,1634],{"class":66},[49,2198,1619],{"class":59},[49,2200,2201],{"class":90},"rock[",[49,2203,2204],{"class":66},"'user'",[49,2206,1835],{"class":90},[49,2208,2209],{"class":66},"'firstName'",[49,2211,1628],{"class":90},[49,2213,1631],{"class":59},[49,2215,1605],{"class":59},[49,2217,2201],{"class":90},[49,2219,2204],{"class":66},[49,2221,1835],{"class":90},[49,2223,2224],{"class":66},"'lastName'",[49,2226,1628],{"class":90},[49,2228,1631],{"class":59},[49,2230,2231],{"class":66},"\"\n",[49,2233,2234,2237,2239,2242,2245,2248,2251,2253,2255,2258,2260,2262,2264,2267,2269,2272,2275,2278,2280,2282],{"class":51,"line":1007},[49,2235,2236],{"class":90},"        writer.writerow([rock[",[49,2238,1816],{"class":66},[49,2240,2241],{"class":90},"], owner, rock[",[49,2243,2244],{"class":66},"\"dueDate\"",[49,2246,2247],{"class":90},"], rock[",[49,2249,2250],{"class":66},"\"rockStatus\"",[49,2252,1835],{"class":90},[49,2254,1816],{"class":66},[49,2256,2257],{"class":90},"], ",[49,2259,1613],{"class":55},[49,2261,1634],{"class":66},[49,2263,1619],{"class":59},[49,2265,2266],{"class":90},"done",[49,2268,1631],{"class":59},[49,2270,2271],{"class":66}," of ",[49,2273,2274],{"class":59},"{len",[49,2276,2277],{"class":90},"(milestones)",[49,2279,1631],{"class":59},[49,2281,1634],{"class":66},[49,2283,2107],{"class":90},[49,2285,2286],{"class":51,"line":1012},[49,2287,74],{"emptyLinePlaceholder":73},[49,2289,2291,2294,2296,2298,2301,2303,2306,2308,2311],{"class":51,"line":2290},57,[49,2292,2293],{"class":59},"print",[49,2295,91],{"class":90},[49,2297,1613],{"class":55},[49,2299,2300],{"class":66},"\"Wrote ",[49,2302,2274],{"class":59},[49,2304,2305],{"class":90},"(rocks)",[49,2307,1631],{"class":59},[49,2309,2310],{"class":66}," Rocks to rocks.csv\"",[49,2312,347],{"class":90},[23,2314,2316],{"id":2315},"pick-up-changes-since-your-last-run","Pick up changes since your last run",[13,2318,2319,2320,2323],{},"To keep another system in step with Success.co (a data warehouse, a reporting database), fetch only what changed since you last looked, rather than everything each time. Every item's ",[31,2321,2322],{},"updatedAt"," moves forward whenever it's created, changed or deleted, so filter on it and keep the latest time you've seen.",[40,2325,2327],{"className":42,"code":2326,"language":44,"meta":45,"style":45},"async function changedIssuesSince(since) {\n  const changed = []\n  let after = null\n  do {\n    const { issues } = await gql(\n      `query ($since: Datetime!, $after: Cursor) {\n        issues(\n          first: 200\n          after: $after\n          filter: { updatedAt: { greaterThan: $since } }\n          orderBy: [UPDATED_AT_ASC, ID_ASC]\n        ) {\n          pageInfo { hasNextPage endCursor }\n          nodes { id number name issueStatusId teamId stateId updatedAt }\n        }\n      }`,\n      { since, after },\n    )\n    changed.push(...issues.nodes)\n    after = issues.pageInfo.hasNextPage ? issues.pageInfo.endCursor : null\n  } while (after)\n  return changed\n}\n\nconst lastRun = '2026-11-01T00:00:00Z' // load this from wherever you saved it last time\nconst changes = await changedIssuesSince(lastRun)\nfor (const issue of changes) {\n  if (issue.stateId === 'DELETED') {\n    // remove it from your copy\n  } else {\n    // insert or update it in your copy\n  }\n}\nconst nextRun = changes.at(-1)?.updatedAt ?? lastRun // save this for next time\n",[31,2328,2329,2345,2357,2370,2377,2396,2401,2406,2411,2416,2421,2426,2431,2436,2441,2445,2451,2456,2460,2476,2496,2506,2513,2517,2521,2536,2552,2569,2584,2589,2597,2602,2606,2610],{"__ignoreMap":45},[49,2330,2331,2333,2335,2338,2340,2343],{"class":51,"line":52},[49,2332,80],{"class":55},[49,2334,83],{"class":55},[49,2336,2337],{"class":86}," changedIssuesSince",[49,2339,91],{"class":90},[49,2341,2342],{"class":94},"since",[49,2344,1375],{"class":90},[49,2346,2347,2349,2352,2354],{"class":51,"line":70},[49,2348,112],{"class":55},[49,2350,2351],{"class":59}," changed",[49,2353,63],{"class":55},[49,2355,2356],{"class":90}," []\n",[49,2358,2359,2362,2365,2367],{"class":51,"line":77},[49,2360,2361],{"class":55},"  let",[49,2363,2364],{"class":90}," after ",[49,2366,615],{"class":55},[49,2368,2369],{"class":59}," null\n",[49,2371,2372,2375],{"class":51,"line":109},[49,2373,2374],{"class":55},"  do",[49,2376,914],{"class":90},[49,2378,2379,2381,2383,2386,2388,2390,2392,2394],{"class":51,"line":134},[49,2380,272],{"class":55},[49,2382,601],{"class":90},[49,2384,2385],{"class":59},"issues",[49,2387,612],{"class":90},[49,2389,615],{"class":55},[49,2391,120],{"class":55},[49,2393,87],{"class":86},[49,2395,622],{"class":90},[49,2397,2398],{"class":51,"line":146},[49,2399,2400],{"class":66},"      `query ($since: Datetime!, $after: Cursor) {\n",[49,2402,2403],{"class":51,"line":152},[49,2404,2405],{"class":66},"        issues(\n",[49,2407,2408],{"class":51,"line":179},[49,2409,2410],{"class":66},"          first: 200\n",[49,2412,2413],{"class":51,"line":193},[49,2414,2415],{"class":66},"          after: $after\n",[49,2417,2418],{"class":51,"line":199},[49,2419,2420],{"class":66},"          filter: { updatedAt: { greaterThan: $since } }\n",[49,2422,2423],{"class":51,"line":216},[49,2424,2425],{"class":66},"          orderBy: [UPDATED_AT_ASC, ID_ASC]\n",[49,2427,2428],{"class":51,"line":222},[49,2429,2430],{"class":66},"        ) {\n",[49,2432,2433],{"class":51,"line":243},[49,2434,2435],{"class":66},"          pageInfo { hasNextPage endCursor }\n",[49,2437,2438],{"class":51,"line":269},[49,2439,2440],{"class":66},"          nodes { id number name issueStatusId teamId stateId updatedAt }\n",[49,2442,2443],{"class":51,"line":312},[49,2444,1975],{"class":66},[49,2446,2447,2449],{"class":51,"line":350},[49,2448,882],{"class":66},[49,2450,143],{"class":90},[49,2452,2453],{"class":51,"line":356},[49,2454,2455],{"class":90},"      { since, after },\n",[49,2457,2458],{"class":51,"line":365},[49,2459,902],{"class":90},[49,2461,2462,2465,2468,2470,2473],{"class":51,"line":665},[49,2463,2464],{"class":90},"    changed.",[49,2466,2467],{"class":86},"push",[49,2469,91],{"class":90},[49,2471,2472],{"class":55},"...",[49,2474,2475],{"class":90},"issues.nodes)\n",[49,2477,2478,2481,2483,2486,2488,2491,2494],{"class":51,"line":673},[49,2479,2480],{"class":90},"    after ",[49,2482,615],{"class":55},[49,2484,2485],{"class":90}," issues.pageInfo.hasNextPage ",[49,2487,1277],{"class":55},[49,2489,2490],{"class":90}," issues.pageInfo.endCursor ",[49,2492,2493],{"class":55},":",[49,2495,2369],{"class":59},[49,2497,2498,2500,2503],{"class":51,"line":679},[49,2499,908],{"class":90},[49,2501,2502],{"class":55},"while",[49,2504,2505],{"class":90}," (after)\n",[49,2507,2508,2510],{"class":51,"line":685},[49,2509,359],{"class":55},[49,2511,2512],{"class":90}," changed\n",[49,2514,2515],{"class":51,"line":703},[49,2516,368],{"class":90},[49,2518,2519],{"class":51,"line":734},[49,2520,74],{"emptyLinePlaceholder":73},[49,2522,2523,2525,2528,2530,2533],{"class":51,"line":739},[49,2524,56],{"class":55},[49,2526,2527],{"class":59}," lastRun",[49,2529,63],{"class":55},[49,2531,2532],{"class":66}," '2026-11-01T00:00:00Z'",[49,2534,2535],{"class":408}," // load this from wherever you saved it last time\n",[49,2537,2538,2540,2543,2545,2547,2549],{"class":51,"line":754},[49,2539,56],{"class":55},[49,2541,2542],{"class":59}," changes",[49,2544,63],{"class":55},[49,2546,120],{"class":55},[49,2548,2337],{"class":86},[49,2550,2551],{"class":90},"(lastRun)\n",[49,2553,2554,2556,2558,2560,2563,2566],{"class":51,"line":759},[49,2555,2004],{"class":55},[49,2557,249],{"class":90},[49,2559,56],{"class":55},[49,2561,2562],{"class":59}," issue",[49,2564,2565],{"class":55}," of",[49,2567,2568],{"class":90}," changes) {\n",[49,2570,2571,2573,2576,2579,2582],{"class":51,"line":779},[49,2572,246],{"class":55},[49,2574,2575],{"class":90}," (issue.stateId ",[49,2577,2578],{"class":55},"===",[49,2580,2581],{"class":66}," 'DELETED'",[49,2583,1375],{"class":90},[49,2585,2586],{"class":51,"line":785},[49,2587,2588],{"class":408},"    // remove it from your copy\n",[49,2590,2591,2593,2595],{"class":51,"line":791},[49,2592,908],{"class":90},[49,2594,911],{"class":55},[49,2596,914],{"class":90},[49,2598,2599],{"class":51,"line":797},[49,2600,2601],{"class":408},"    // insert or update it in your copy\n",[49,2603,2604],{"class":51,"line":803},[49,2605,353],{"class":90},[49,2607,2608],{"class":51,"line":810},[49,2609,368],{"class":90},[49,2611,2612,2614,2617,2619,2622,2625,2627,2629,2631,2634,2636,2639],{"class":51,"line":816},[49,2613,56],{"class":55},[49,2615,2616],{"class":59}," nextRun",[49,2618,63],{"class":55},[49,2620,2621],{"class":90}," changes.",[49,2623,2624],{"class":86},"at",[49,2626,91],{"class":90},[49,2628,524],{"class":55},[49,2630,2154],{"class":59},[49,2632,2633],{"class":90},")?.updatedAt ",[49,2635,301],{"class":55},[49,2637,2638],{"class":90}," lastRun ",[49,2640,2641],{"class":408},"// save this for next time\n",[13,2643,2644,2645,2648,2649,98,2652,98,2655,98,2658,2660],{},"Don't filter on ",[31,2646,2647],{},"stateId"," here: deleted items are changes too, and this is how you hear about them. Run one of these per object you copy (",[31,2650,2651],{},"todos",[31,2653,2654],{},"rocks",[31,2656,2657],{},"headlines",[31,2659,766],{}," and so on).",[23,2662,2664],{"id":2663},"list-overdue-to-dos","List overdue To-dos",[13,2666,2667],{},"The basis for a weekly reminder or a digest: every open To-do past its due date, grouped by owner.",[40,2669,2673],{"className":2670,"code":2671,"language":2672,"meta":45,"style":45},"language-graphql shiki shiki-themes github-light github-dark","query Overdue($today: Date!) {\n  todos(\n    filter: {\n      stateId: { equalTo: \"ACTIVE\" }\n      todoStatusId: { equalTo: \"TODO\" }\n      dueDate: { lessThan: $today }\n    }\n    orderBy: [USER_ID_ASC, DUE_DATE_ASC]\n  ) {\n    totalCount\n    nodes {\n      name\n      dueDate\n      team { name }\n      user { firstName lastName email }\n    }\n  }\n}\n","graphql",[31,2674,2675,2696,2703,2711,2730,2746,2762,2767,2786,2791,2796,2803,2808,2813,2824,2842,2846,2850],{"__ignoreMap":45},[49,2676,2677,2679,2682,2684,2687,2689,2692,2694],{"class":51,"line":52},[49,2678,95],{"class":55},[49,2680,2681],{"class":86}," Overdue",[49,2683,91],{"class":90},[49,2685,2686],{"class":94},"$today",[49,2688,185],{"class":90},[49,2690,2691],{"class":59},"Date",[49,2693,252],{"class":55},[49,2695,1375],{"class":90},[49,2697,2698,2701],{"class":51,"line":70},[49,2699,2700],{"class":94},"  todos",[49,2702,622],{"class":90},[49,2704,2705,2708],{"class":51,"line":77},[49,2706,2707],{"class":94},"    filter",[49,2709,2710],{"class":90},": {\n",[49,2712,2713,2716,2719,2722,2724,2727],{"class":51,"line":109},[49,2714,2715],{"class":66},"      stateId",[49,2717,2718],{"class":90},": { ",[49,2720,2721],{"class":66},"equalTo",[49,2723,185],{"class":90},[49,2725,2726],{"class":66},"\"ACTIVE\"",[49,2728,2729],{"class":90}," }\n",[49,2731,2732,2735,2737,2739,2741,2744],{"class":51,"line":134},[49,2733,2734],{"class":66},"      todoStatusId",[49,2736,2718],{"class":90},[49,2738,2721],{"class":66},[49,2740,185],{"class":90},[49,2742,2743],{"class":66},"\"TODO\"",[49,2745,2729],{"class":90},[49,2747,2748,2751,2753,2756,2758,2760],{"class":51,"line":146},[49,2749,2750],{"class":66},"      dueDate",[49,2752,2718],{"class":90},[49,2754,2755],{"class":66},"lessThan",[49,2757,185],{"class":90},[49,2759,2686],{"class":94},[49,2761,2729],{"class":90},[49,2763,2764],{"class":51,"line":152},[49,2765,2766],{"class":90},"    }\n",[49,2768,2769,2772,2775,2778,2781,2784],{"class":51,"line":179},[49,2770,2771],{"class":94},"    orderBy",[49,2773,2774],{"class":90},": [",[49,2776,2777],{"class":59},"USER_ID_ASC",[49,2779,2780],{"class":90},",",[49,2782,2783],{"class":59}," DUE_DATE_ASC",[49,2785,700],{"class":90},[49,2787,2788],{"class":51,"line":193},[49,2789,2790],{"class":90},"  ) {\n",[49,2792,2793],{"class":51,"line":199},[49,2794,2795],{"class":94},"    totalCount\n",[49,2797,2798,2801],{"class":51,"line":216},[49,2799,2800],{"class":94},"    nodes",[49,2802,914],{"class":90},[49,2804,2805],{"class":51,"line":222},[49,2806,2807],{"class":94},"      name\n",[49,2809,2810],{"class":51,"line":243},[49,2811,2812],{"class":94},"      dueDate\n",[49,2814,2815,2818,2820,2822],{"class":51,"line":269},[49,2816,2817],{"class":94},"      team",[49,2819,601],{"class":90},[49,2821,985],{"class":94},[49,2823,2729],{"class":90},[49,2825,2826,2829,2831,2834,2837,2840],{"class":51,"line":312},[49,2827,2828],{"class":94},"      user",[49,2830,601],{"class":90},[49,2832,2833],{"class":94},"firstName",[49,2835,2836],{"class":94}," lastName",[49,2838,2839],{"class":94}," email",[49,2841,2729],{"class":90},[49,2843,2844],{"class":51,"line":350},[49,2845,2766],{"class":90},[49,2847,2848],{"class":51,"line":356},[49,2849,353],{"class":90},[49,2851,2852],{"class":51,"line":365},[49,2853,368],{"class":90},[13,2855,2856,2857,2860,2861,164],{},"Pass today's date as ",[31,2858,2859],{},"today",", for example ",[31,2862,2863],{},"{ \"today\": \"2026-11-12\" }",[2865,2866,2867],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}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 .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":45,"searchDepth":70,"depth":70,"links":2869},[2870,2871,2872,2873,2874,2875],{"id":25,"depth":70,"text":26},{"id":371,"depth":70,"text":372},{"id":1041,"depth":70,"text":1042},{"id":1545,"depth":70,"text":1546},{"id":2315,"depth":70,"text":2316},{"id":2663,"depth":70,"text":2664},[2877,2878,2879,2880,2881,2882],{"id":25,"title":26},{"id":371,"title":372},{"id":1041,"title":1042},{"id":1545,"title":1546},{"id":2315,"title":2316},{"id":2663,"title":2664},{"title":2884,"description":2885},"Success.co API recipes — Success.co","Examples for the Success.co API. Send Scorecard numbers, create Issues from other tools, export Rocks and pick up changes since your last run.","2026-11-12T13:59:30+00:00",{"value":2888},[2889,2907,2961,2982,2988,2997,3033],{"title":2890,"links":2891},"Getting Started",[2892,2895,2898,2901,2904],{"title":2893,"href":2894},"Getting Started with Success.co","/docs/guides/getting-started",{"title":2896,"href":2897},"Join your team","/docs/guides/join-your-team",{"title":2899,"href":2900},"EOS® Implementers  Guide","/docs/guides/implementers",{"title":2902,"href":2903},"Affiliate Program Guide","/docs/guides/affiliate-program",{"title":2905,"href":2906},"Import Data","/docs/guides/import-data",{"title":2908,"links":2909},"Platform",[2910,2913,2916,2919,2922,2925,2928,2931,2934,2937,2940,2943,2946,2949,2952,2955,2958],{"title":2911,"href":2912},"Vision/Traction Organizer (V/TO®)  Guide","/docs/guides/vision-traction-organizer-vto",{"title":2914,"href":2915},"Accountability Chart Guide","/docs/guides/accountability-chart",{"title":2917,"href":2918},"Dashboard Guide to Track Rocks, To-Dos & Issues","/docs/guides/dashboard",{"title":2920,"href":2921},"L10™ Meetings","/docs/guides/l10-meetings",{"title":2923,"href":2924},"Rocks","/docs/guides/rocks",{"title":2926,"href":2927},"Scorecard™","/docs/guides/scorecard",{"title":2929,"href":2930},"EOS® Meeting Agendas Guide","/docs/guides/agendas",{"title":2932,"href":2933},"Issues","/docs/guides/issues",{"title":2935,"href":2936},"Headlines","/docs/guides/headlines",{"title":2938,"href":2939},"How To Use To-Dos in Success.co?","/docs/guides/to-dos",{"title":2941,"href":2942},"People Analyzer","/docs/guides/people-analyzer",{"title":2944,"href":2945},"Organizational Checkup™","/docs/guides/organizational-checkup",{"title":2947,"href":2948},"S.W.O.T","/docs/guides/swot-analysis",{"title":2950,"href":2951},"Process","/docs/guides/process",{"title":2953,"href":2954},"Implementer Hub","/docs/guides/implementer-hub",{"title":2956,"href":2957},"Insights","/docs/guides/insights",{"title":2959,"href":2960},"Mastery","/docs/guides/mastery",{"title":2962,"links":2963},"Advanced",[2964,2967,2970,2973,2976,2979],{"title":2965,"href":2966},"Filtering","/docs/guides/filtering",{"title":2968,"href":2969},"Quarter Dates","/docs/guides/quarter-dates",{"title":2971,"href":2972},"Keyboard Shortcuts Guide","/docs/guides/keyboard-shortcuts",{"title":2974,"href":2975},"Related Items","/docs/guides/related-items",{"title":2977,"href":2978},"Notifications","/docs/guides/notifications",{"title":2980,"href":2981},"Import Templates","/docs/guides/import-templates",{"title":2983,"links":2984},"Billing",[2985],{"title":2986,"href":2987},"Billing Guide – Set Up Payments, Update Details, and Access Invoices","/docs/guides/billing",{"title":2989,"links":2990},"Apps",[2991,2994],{"title":2992,"href":2993},"Desktop App Guide to Boost Productivity & Track Tasks","/docs/guides/desktop-app",{"title":2995,"href":2996},"Mobile App","/docs/guides/mobile-app",{"title":2998,"links":2999},"Integrations",[3000,3003,3006,3009,3012,3015,3018,3021,3024,3027,3030],{"title":3001,"href":3002},"Success.co Integrations","/docs/guides/successco-integrations",{"title":3004,"href":3005},"Google Calendar Integration Guide","/docs/guides/google-calendar",{"title":3007,"href":3008},"Microsoft Calendar Integration Guide","/docs/guides/microsoft-calendar",{"title":3010,"href":3011},"Microsoft Teams","/docs/guides/microsoft-teams",{"title":3013,"href":3014},"Slack","/docs/guides/slack",{"title":3016,"href":3017},"Asana Integration Guide","/docs/guides/asana",{"title":3019,"href":3020},"ClickUp Integration Guide","/docs/guides/clickup",{"title":3022,"href":3023},"Monday.com Integration Guide","/docs/guides/monday",{"title":3025,"href":3026},"Teamwork Integration Guide","/docs/guides/teamwork",{"title":3028,"href":3029},"Success.co AI Connector (MCP)","/docs/guides/ai-mcp-connector",{"title":3031,"href":3032},"Zapier","/docs/guides/zapier",{"title":3034,"links":3035},"API",[3036,3039,3042,3045,3047,3048],{"title":3037,"href":3038},"Getting started with the API","/docs/guides/api-getting-started",{"title":3040,"href":3041},"Reading data","/docs/guides/api-reading-data",{"title":3043,"href":3044},"Creating and updating data","/docs/guides/api-creating-and-updating-data",{"title":1541,"href":3046},"/docs/guides/api-data-model",{"title":7,"href":6},{"title":1532,"href":3049},"/docs/guides/api-errors-and-limits",{"value":3051},{"id":3052,"extension":3053,"meta":3054,"og_image":3055,"og_locale":3056,"og_title_fallback":3057,"site_url":3058,"stem":3059,"title_suffix":3060,"__hash__":3061,"ogImageAsset":3062},"seoSettings/settings/seo.yml","yml",{},"df2824aa25f11988810a1b0f3c08f0f2","en_GB","The EOS App","https://www.success.co","settings/seo"," — Success.co","nnRZDXC71vobecumYGFChQJ7a9XRrFJq7bfBBCWo6Bk",{"id":3055,"publicId":3063,"version":3064,"format":3065,"resourceType":3066,"width":3067,"height":3068,"alt":3069,"name":3070},"site/success-opengraph-image",1791366213,"png","image",1200,630,"Success.co","Success OpenGraph Image",1794503195792]