[{"data":1,"prerenderedAt":488},["ShallowReactive",2],{"navigation-en":3,"page-\u002Fen\u002Fauth-modes\u002Fservice-account":134,"\u002Fen\u002Fauth-modes\u002Fservice-account-surround":483},[4],{"title":5,"path":6,"stem":7,"children":8,"page":26},"En","\u002Fen","en",[9,27,48,77,90,97],{"title":10,"path":11,"stem":12,"children":13,"page":26},"Getting Started","\u002Fen\u002Fgetting-started","en\u002F1.getting-started",[14,18,22],{"title":15,"path":16,"stem":17},"Introduction","\u002Fen\u002Fgetting-started\u002Fintroduction","en\u002F1.getting-started\u002F1.introduction",{"title":19,"path":20,"stem":21},"Installation","\u002Fen\u002Fgetting-started\u002Finstallation","en\u002F1.getting-started\u002F2.installation",{"title":23,"path":24,"stem":25},"Configuration Reference","\u002Fen\u002Fgetting-started\u002Fconfiguration","en\u002F1.getting-started\u002F3.configuration",false,{"title":28,"path":29,"stem":30,"children":31,"page":26},"Composables","\u002Fen\u002Fcomposables","en\u002F2.composables",[32,36,40,44],{"title":33,"path":34,"stem":35},"useGSheet","\u002Fen\u002Fcomposables\u002Fuse-gsheet","en\u002F2.composables\u002F1.use-gsheet",{"title":37,"path":38,"stem":39},"useGSheetAsObject","\u002Fen\u002Fcomposables\u002Fuse-gsheet-as-object","en\u002F2.composables\u002F2.use-gsheet-as-object",{"title":41,"path":42,"stem":43},"useGSheetRow","\u002Fen\u002Fcomposables\u002Fuse-gsheet-row","en\u002F2.composables\u002F3.use-gsheet-row",{"title":45,"path":46,"stem":47},"useGSheetWrite","\u002Fen\u002Fcomposables\u002Fuse-gsheet-write","en\u002F2.composables\u002F4.use-gsheet-write",{"title":49,"path":50,"stem":51,"children":52,"page":26},"Authentication Modes","\u002Fen\u002Fauth-modes","en\u002F3.auth-modes",[53,57,61,65,69,73],{"title":54,"path":55,"stem":56},"Authentication Modes Overview","\u002Fen\u002Fauth-modes\u002Foverview","en\u002F3.auth-modes\u002F1.overview",{"title":58,"path":59,"stem":60},"GViz Mode (Google Visualization API)","\u002Fen\u002Fauth-modes\u002Fgviz","en\u002F3.auth-modes\u002F2.gviz",{"title":62,"path":63,"stem":64},"CSV Export Mode","\u002Fen\u002Fauth-modes\u002Fcsv","en\u002F3.auth-modes\u002F3.csv",{"title":66,"path":67,"stem":68},"Google Apps Script Mode","\u002Fen\u002Fauth-modes\u002Fappscript","en\u002F3.auth-modes\u002F4.appscript",{"title":70,"path":71,"stem":72},"API Key Mode","\u002Fen\u002Fauth-modes\u002Fapikey","en\u002F3.auth-modes\u002F5.apikey",{"title":74,"path":75,"stem":76},"Service Account Mode","\u002Fen\u002Fauth-modes\u002Fservice-account","en\u002F3.auth-modes\u002F6.service-account",{"title":78,"path":79,"stem":80,"children":81,"page":26},"AI","\u002Fen\u002Fai","en\u002F4.ai",[82,86],{"title":83,"path":84,"stem":85},"Agent Skills (AI Integration)","\u002Fen\u002Fai\u002Fagent-skills","en\u002F4.ai\u002F1.agent-skills",{"title":87,"path":88,"stem":89},"Model Context Protocol (MCP)","\u002Fen\u002Fai\u002Fmcp","en\u002F4.ai\u002F2.mcp",{"title":91,"path":92,"stem":93,"children":94},"Demos","\u002Fen\u002Fdemos","en\u002F5.demos\u002Findex",[95],{"title":96,"path":92,"stem":93},"Live Demos",{"title":98,"path":99,"stem":100,"children":101,"page":26},"Tutorials","\u002Fen\u002Ftutorials","en\u002F6.tutorials",[102,106,110,114,118,122,126,130],{"title":103,"path":104,"stem":105},"Tutorials Overview","\u002Fen\u002Ftutorials\u002Foverview","en\u002F6.tutorials\u002F0.overview",{"title":107,"path":108,"stem":109},"Apps Script Web App Tutorial","\u002Fen\u002Ftutorials\u002Fappscript-tutorial","en\u002F6.tutorials\u002F1.appscript-tutorial",{"title":111,"path":112,"stem":113},"Complete Step-by-Step Tutorial","\u002Fen\u002Ftutorials\u002Fstep-by-step","en\u002F6.tutorials\u002F1.step-by-step",{"title":115,"path":116,"stem":117},"GViz SQL Analytics Tutorial","\u002Fen\u002Ftutorials\u002Fgviz-sql-tutorial","en\u002F6.tutorials\u002F2.gviz-sql-tutorial",{"title":119,"path":120,"stem":121},"CSV Product Catalog Tutorial","\u002Fen\u002Ftutorials\u002Fcsv-catalog-tutorial","en\u002F6.tutorials\u002F3.csv-catalog-tutorial",{"title":123,"path":124,"stem":125},"API Key Inventory Tutorial","\u002Fen\u002Ftutorials\u002Fapikey-tutorial","en\u002F6.tutorials\u002F4.apikey-tutorial",{"title":127,"path":128,"stem":129},"Service Account HR & Payroll Tutorial","\u002Fen\u002Ftutorials\u002Fservice-account-tutorial","en\u002F6.tutorials\u002F5.service-account-tutorial",{"title":131,"path":132,"stem":133},"Sheet Routing Map Tutorial","\u002Fen\u002Ftutorials\u002Fsheets-routing-tutorial","en\u002F6.tutorials\u002F6.sheets-routing-tutorial",{"id":135,"title":74,"body":136,"description":477,"extension":478,"icon":479,"links":479,"meta":480,"navigation":479,"path":75,"seo":481,"stem":76,"__hash__":482},"docs_en\u002Fen\u002F3.auth-modes\u002F6.service-account.md",{"type":137,"value":138,"toc":473},"minimark",[139,143,148,174,203,207,469],[140,141,142],"p",{},"Service Account mode uses GCP Service Account credentials (client email & private key JSON) to access private Google Sheets.",[144,145,147],"h2",{"id":146},"setup","Setup",[149,150,151,155,158,166],"ol",{},[152,153,154],"li",{},"Create a Service Account in GCP Console.",[152,156,157],{},"Download JSON key file.",[152,159,160,161,165],{},"Share your private Google Sheet with the Service Account email as ",[162,163,164],"strong",{},"Editor",".",[152,167,168,169,173],{},"Configure ",[170,171,172],"code",{},".env",":",[175,176,181],"pre",{"className":177,"code":178,"filename":172,"language":179,"meta":180,"style":180},"language-env shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","GSHEET_SPREADSHEET_ID=your-private-spreadsheet-id\nGSHEET_CLIENT_EMAIL=your-service-account@project.iam.gserviceaccount.com\nGSHEET_PRIVATE_KEY=\"-----BEGIN PRIVATE KEY-----\\nYOUR_KEY\\n-----END PRIVATE KEY-----\\n\"\n","env","",[170,182,183,191,197],{"__ignoreMap":180},[184,185,188],"span",{"class":186,"line":187},"line",1,[184,189,190],{},"GSHEET_SPREADSHEET_ID=your-private-spreadsheet-id\n",[184,192,194],{"class":186,"line":193},2,[184,195,196],{},"GSHEET_CLIENT_EMAIL=your-service-account@project.iam.gserviceaccount.com\n",[184,198,200],{"class":186,"line":199},3,[184,201,202],{},"GSHEET_PRIVATE_KEY=\"-----BEGIN PRIVATE KEY-----\\nYOUR_KEY\\n-----END PRIVATE KEY-----\\n\"\n",[144,204,206],{"id":205},"example","Example",[175,208,213],{"className":209,"code":210,"filename":211,"language":212,"meta":180,"style":180},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nconst { data: orders, refresh } = await useGSheetAsObject('A1:D50', { sheet: 'Orders' })\nconst { append } = useGSheetWrite({ sheet: 'Orders' })\n\nconst saveOrder = async () => {\n  await append('A1:D1', [['ORD-101', 'Acme', '99.00', 'Paid']])\n  await refresh()\n}\n\u003C\u002Fscript>\n","pages\u002Forders.vue","vue",[170,214,215,247,318,353,360,382,442,453,459],{"__ignoreMap":180},[184,216,217,221,225,229,232,235,238,242,244],{"class":186,"line":187},[184,218,220],{"class":219},"sMK4o","\u003C",[184,222,224],{"class":223},"swJcz","script",[184,226,228],{"class":227},"spNyl"," setup",[184,230,231],{"class":227}," lang",[184,233,234],{"class":219},"=",[184,236,237],{"class":219},"\"",[184,239,241],{"class":240},"sfazB","ts",[184,243,237],{"class":219},[184,245,246],{"class":219},">\n",[184,248,249,252,255,258,260,264,267,270,273,276,280,284,287,290,293,295,297,299,302,304,307,310,312,315],{"class":186,"line":193},[184,250,251],{"class":227},"const",[184,253,254],{"class":219}," {",[184,256,257],{"class":223}," data",[184,259,173],{"class":219},[184,261,263],{"class":262},"sTEyZ"," orders",[184,265,266],{"class":219},",",[184,268,269],{"class":262}," refresh ",[184,271,272],{"class":219},"}",[184,274,275],{"class":219}," =",[184,277,279],{"class":278},"s7zQu"," await",[184,281,283],{"class":282},"s2Zo4"," useGSheetAsObject",[184,285,286],{"class":262},"(",[184,288,289],{"class":219},"'",[184,291,292],{"class":240},"A1:D50",[184,294,289],{"class":219},[184,296,266],{"class":219},[184,298,254],{"class":219},[184,300,301],{"class":223}," sheet",[184,303,173],{"class":219},[184,305,306],{"class":219}," '",[184,308,309],{"class":240},"Orders",[184,311,289],{"class":219},[184,313,314],{"class":219}," }",[184,316,317],{"class":262},")\n",[184,319,320,322,324,327,329,331,334,336,339,341,343,345,347,349,351],{"class":186,"line":199},[184,321,251],{"class":227},[184,323,254],{"class":219},[184,325,326],{"class":262}," append ",[184,328,272],{"class":219},[184,330,275],{"class":219},[184,332,333],{"class":282}," useGSheetWrite",[184,335,286],{"class":262},[184,337,338],{"class":219},"{",[184,340,301],{"class":223},[184,342,173],{"class":219},[184,344,306],{"class":219},[184,346,309],{"class":240},[184,348,289],{"class":219},[184,350,314],{"class":219},[184,352,317],{"class":262},[184,354,356],{"class":186,"line":355},4,[184,357,359],{"emptyLinePlaceholder":358},true,"\n",[184,361,363,365,368,370,373,376,379],{"class":186,"line":362},5,[184,364,251],{"class":227},[184,366,367],{"class":262}," saveOrder ",[184,369,234],{"class":219},[184,371,372],{"class":227}," async",[184,374,375],{"class":219}," ()",[184,377,378],{"class":227}," =>",[184,380,381],{"class":219}," {\n",[184,383,385,388,391,393,395,398,400,402,405,407,410,412,414,416,419,421,423,425,428,430,432,434,437,439],{"class":186,"line":384},6,[184,386,387],{"class":278},"  await",[184,389,390],{"class":282}," append",[184,392,286],{"class":223},[184,394,289],{"class":219},[184,396,397],{"class":240},"A1:D1",[184,399,289],{"class":219},[184,401,266],{"class":219},[184,403,404],{"class":223}," [[",[184,406,289],{"class":219},[184,408,409],{"class":240},"ORD-101",[184,411,289],{"class":219},[184,413,266],{"class":219},[184,415,306],{"class":219},[184,417,418],{"class":240},"Acme",[184,420,289],{"class":219},[184,422,266],{"class":219},[184,424,306],{"class":219},[184,426,427],{"class":240},"99.00",[184,429,289],{"class":219},[184,431,266],{"class":219},[184,433,306],{"class":219},[184,435,436],{"class":240},"Paid",[184,438,289],{"class":219},[184,440,441],{"class":223},"]])\n",[184,443,445,447,450],{"class":186,"line":444},7,[184,446,387],{"class":278},[184,448,449],{"class":282}," refresh",[184,451,452],{"class":223},"()\n",[184,454,456],{"class":186,"line":455},8,[184,457,458],{"class":219},"}\n",[184,460,462,465,467],{"class":186,"line":461},9,[184,463,464],{"class":219},"\u003C\u002F",[184,466,224],{"class":223},[184,468,246],{"class":219},[470,471,472],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":180,"searchDepth":187,"depth":193,"links":474},[475,476],{"id":146,"depth":193,"text":147},{"id":205,"depth":193,"text":206},"Enterprise-grade Read & Write access for private, unshared Google Sheets.","md",null,{},{"title":74,"description":477},"B9jAsze5C9cplb7ENnuX_CBGc-nxCaoNGNVutsvZmNA",[484,486],{"title":70,"path":71,"stem":72,"description":485,"children":-1},"Standard Google Sheets API v4 integration using GCP API Keys.",{"title":83,"path":84,"stem":85,"description":487,"children":-1},"Bundled Agent Skills RFC implementation for AI coding assistants.",1786088226493]