[{"data":1,"prerenderedAt":488},["ShallowReactive",2],{"navigation":3,"\u002Fgetting-started\u002Fauthentication":99,"\u002Fgetting-started\u002Fauthentication-surround":483},[4,16,52,71,91],{"title":5,"path":6,"stem":7,"children":8,"icon":15},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,11],{"title":10,"path":6,"stem":7,"children":-1},"Introduction",{"title":12,"path":13,"stem":14,"children":-1},"Authentication","\u002Fgetting-started\u002Fauthentication","1.getting-started\u002F2.authentication","i-lucide-rocket",{"title":17,"path":18,"stem":19,"children":20,"icon":51},"GraphQL API","\u002Fgraphql-api","2.graphql-api\u002F1.index",[21,23,27,31,35,39,43,47],{"title":22,"path":18,"stem":19,"children":-1},"API Overview",{"title":24,"path":25,"stem":26,"children":-1},"Querying Patterns","\u002Fgraphql-api\u002Fquerying","2.graphql-api\u002F2.querying",{"title":28,"path":29,"stem":30,"children":-1},"Mutation Patterns","\u002Fgraphql-api\u002Fmutations","2.graphql-api\u002F3.mutations",{"title":32,"path":33,"stem":34,"children":-1},"List SaaS Applications","\u002Fgraphql-api\u002Fguides\u002Flist-applications","2.graphql-api\u002F4.guides\u002F1.list-applications",{"title":36,"path":37,"stem":38,"children":-1},"Find Unused Licenses","\u002Fgraphql-api\u002Fguides\u002Ffind-unused-licenses","2.graphql-api\u002F4.guides\u002F2.find-unused-licenses",{"title":40,"path":41,"stem":42,"children":-1},"Retrieve Upcoming Renewals","\u002Fgraphql-api\u002Fguides\u002Fupcoming-renewals","2.graphql-api\u002F4.guides\u002F3.upcoming-renewals",{"title":44,"path":45,"stem":46,"children":-1},"Handle GraphQL Errors","\u002Fgraphql-api\u002Fguides\u002Fhandle-errors","2.graphql-api\u002F4.guides\u002F4.handle-errors",{"title":48,"path":49,"icon":50},"API Reference","\u002Fgql-schema-reference","i-lucide-file-code","i-lucide-braces",{"title":53,"path":54,"stem":55,"children":56,"icon":70},"Sync API","\u002Fsync-api","3.sync-api\u002F1.index",[57,59,63,67],{"title":58,"path":54,"stem":55,"children":-1},"Viio Sync API",{"title":60,"path":61,"stem":62,"children":-1},"Quickstart","\u002Fsync-api\u002Fquickstart","3.sync-api\u002F2.quickstart",{"title":64,"path":65,"icon":66},"Examples","\u002Fsync-api\u002Faws-lambda-python","i-lucide-code-xml",{"title":68,"path":69,"icon":50},"SDK Reference","\u002Fsync-api\u002Fapi-reference","i-lucide-refresh-cw",{"title":72,"path":73,"stem":74,"children":75,"icon":90},"MCP Server","\u002Fmcp-server","4.mcp-server\u002F1.index",[76,78,82,86],{"title":77,"path":73,"stem":74,"children":-1},"Viio MCP Server",{"title":79,"path":80,"stem":81,"children":-1},"Setup","\u002Fmcp-server\u002Fsetup","4.mcp-server\u002F2.setup",{"title":83,"path":84,"stem":85,"children":-1},"Available Tools","\u002Fmcp-server\u002Ftools","4.mcp-server\u002F3.tools",{"title":87,"path":88,"stem":89,"children":-1},"SaaS Analysis Use Cases","\u002Fmcp-server\u002Fuse-cases","4.mcp-server\u002F4.use-cases","i-lucide-bot",{"title":92,"path":93,"stem":94,"children":95,"icon":98},"AI Integration","\u002Fai","5.ai\u002F1.index",[96],{"title":97,"path":93,"stem":94,"children":-1},"llms.txt","i-lucide-sparkles",{"id":100,"title":12,"body":101,"dateModified":472,"datePublished":473,"description":474,"extension":475,"links":476,"meta":477,"navigation":478,"path":13,"seo":479,"stem":14,"__hash__":482},"docs\u002F1.getting-started\u002F2.authentication.md",{"type":102,"value":103,"toc":463},"minimark",[104,113,118,174,182,186,194,273,278,321,325,332,340,343,402,409,413,417,420,424,427,452,459],[105,106,107,108,112],"p",{},"All Viio API requests require authentication via an ",[109,110,111],"strong",{},"API key"," generated from the Viio dashboard.",[114,115,117],"h2",{"id":116},"generating-an-api-key","Generating an API Key",[119,120,121,133,147,153,156,166,171],"ol",{},[122,123,124,125,132],"li",{},"Log in to the ",[126,127,131],"a",{"href":128,"rel":129},"https:\u002F\u002Fapp.viio.io",[130],"nofollow","Viio dashboard",".",[122,134,135,136,132],{},"Open the account menu by clicking your workspace logo in the sidebar, then go to ",[126,137,140,143,144],{"href":138,"rel":139},"https:\u002F\u002Fapp.viio.io\u002Fpreferences\u002Fapi-keys",[130],[109,141,142],{},"Preferences"," > ",[109,145,146],{},"API Keys",[122,148,149,150,132],{},"Click ",[109,151,152],{},"New Key",[122,154,155],{},"Give your key a descriptive name (e.g., \"CI\u002FCD Integration\" or \"Custom Dashboard\").",[122,157,158,159,162,163,132],{},"Select a permission scope — ",[109,160,161],{},"Full Access (Read & Write)"," or ",[109,164,165],{},"Full Access (Read)",[122,167,149,168,132],{},[109,169,170],{},"Create Key",[122,172,173],{},"Copy the generated key — it will only be shown once.",[175,176,179],"callout",{"color":177,"icon":178},"amber","i-lucide-triangle-alert",[105,180,181],{},"Store your API key securely. Do not commit it to version control or share it in plain text. Use environment variables or a secrets manager.",[114,183,185],{"id":184},"making-authenticated-graphql-requests","Making Authenticated GraphQL Requests",[105,187,188,189,193],{},"Include your API key in the ",[190,191,192],"code",{},"Authorization"," header:",[195,196,201],"pre",{"className":197,"code":198,"language":199,"meta":200,"style":200},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -X POST https:\u002F\u002Fapi.viio.io\u002Fgraphql \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -H \"Authorization: YOUR_API_KEY\" \\\n  -d '{\"query\": \"{ applications { nodes { id name } } }\"}'\n","bash","",[190,202,203,226,244,258],{"__ignoreMap":200},[204,205,208,212,216,219,222],"span",{"class":206,"line":207},"line",1,[204,209,211],{"class":210},"sBMFI","curl",[204,213,215],{"class":214},"sfazB"," -X",[204,217,218],{"class":214}," POST",[204,220,221],{"class":214}," https:\u002F\u002Fapi.viio.io\u002Fgraphql",[204,223,225],{"class":224},"sTEyZ"," \\\n",[204,227,229,232,236,239,242],{"class":206,"line":228},2,[204,230,231],{"class":214},"  -H",[204,233,235],{"class":234},"sMK4o"," \"",[204,237,238],{"class":214},"Content-Type: application\u002Fjson",[204,240,241],{"class":234},"\"",[204,243,225],{"class":224},[204,245,247,249,251,254,256],{"class":206,"line":246},3,[204,248,231],{"class":214},[204,250,235],{"class":234},[204,252,253],{"class":214},"Authorization: YOUR_API_KEY",[204,255,241],{"class":234},[204,257,225],{"class":224},[204,259,261,264,267,270],{"class":206,"line":260},4,[204,262,263],{"class":214},"  -d",[204,265,266],{"class":234}," '",[204,268,269],{"class":214},"{\"query\": \"{ applications { nodes { id name } } }\"}",[204,271,272],{"class":234},"'\n",[274,275,277],"h3",{"id":276},"header-format","Header Format",[279,280,281,294],"table",{},[282,283,284],"thead",{},[285,286,287,291],"tr",{},[288,289,290],"th",{},"Header",[288,292,293],{},"Value",[295,296,297,309],"tbody",{},[285,298,299,304],{},[300,301,302],"td",{},[190,303,192],{},[300,305,306],{},[190,307,308],{},"YOUR_API_KEY",[285,310,311,316],{},[300,312,313],{},[190,314,315],{},"Content-Type",[300,317,318],{},[190,319,320],{},"application\u002Fjson",[114,322,324],{"id":323},"making-authenticated-sync-api-requests","Making Authenticated Sync API Requests",[105,326,327,328,331],{},"The Sync API uses the same workspace API keys, but its gRPC metadata includes the ",[190,329,330],{},"ApiKey"," authentication scheme:",[195,333,338],{"className":334,"code":336,"language":337,"meta":200},[335],"language-text","Authorization: ApiKey YOUR_API_KEY\n","text",[190,339,336],{"__ignoreMap":200},[105,341,342],{},"Official SDKs attach this metadata to every request:",[344,345,347,377],"tabs",{"sync":346},"sync-api-language",[348,349,351],"tabs-item",{"label":350},"C#",[195,352,356],{"className":353,"code":354,"language":355,"meta":200,"style":200},"language-csharp shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","SyncApiAuthentication.ApiKey(apiKey)\n","csharp",[190,357,358],{"__ignoreMap":200},[204,359,360,363,365,368,371,374],{"class":206,"line":207},[204,361,362],{"class":224},"SyncApiAuthentication",[204,364,132],{"class":234},[204,366,330],{"class":367},"s2Zo4",[204,369,370],{"class":234},"(",[204,372,373],{"class":224},"apiKey",[204,375,376],{"class":234},")\n",[348,378,380],{"label":379},"Python",[195,381,385],{"className":382,"code":383,"language":384,"meta":200,"style":200},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","SyncApiAuthentication.api_key(api_key)\n","python",[190,386,387],{"__ignoreMap":200},[204,388,389,391,393,396,398,400],{"class":206,"line":207},[204,390,362],{"class":224},[204,392,132],{"class":234},[204,394,395],{"class":367},"api_key",[204,397,370],{"class":234},[204,399,395],{"class":367},[204,401,376],{"class":234},[105,403,404,405,408],{},"The key must have write access and the ",[190,406,407],{},"integration:sync"," permission. If that permission is not available when you create a key, contact your Viio representative to enable Sync API access for the workspace.",[410,411],"read-more",{"title":412,"to":61},"Build a complete Sync API integration",[114,414,416],{"id":415},"token-scoping","Token Scoping",[105,418,419],{},"API keys are scoped to your workspace. All queries return data only for the workspace associated with the key. You cannot access data from other workspaces.",[114,421,423],{"id":422},"revoking-api-keys","Revoking API Keys",[105,425,426],{},"To revoke an API key:",[119,428,429,439,446],{},[122,430,431,432,132],{},"Open the account menu and go to ",[126,433,435,143,437],{"href":138,"rel":434},[130],[109,436,142],{},[109,438,146],{},[122,440,441,442,445],{},"Find the key you want to revoke and click the ",[109,443,444],{},"⋮"," action menu.",[122,447,149,448,451],{},[109,449,450],{},"Delete"," and confirm in the dialog.",[105,453,454,455,458],{},"Revoked keys immediately stop working. Any integrations using the key will receive ",[190,456,457],{},"401 Unauthorized"," responses.",[460,461,462],"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 pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":200,"searchDepth":207,"depth":228,"links":464},[465,466,469,470,471],{"id":116,"depth":228,"text":117},{"id":184,"depth":228,"text":185,"children":467},[468],{"id":276,"depth":246,"text":277},{"id":323,"depth":228,"text":324},{"id":415,"depth":228,"text":416},{"id":422,"depth":228,"text":423},"2026-08-05","2026-01-31","How to authenticate with the Viio API using API keys.","md",null,{},true,{"title":480,"description":481},"Viio API Authentication and API Keys","Generate, use, scope, and revoke Viio API keys for authenticated GraphQL and Sync API requests.","2A4V5CO5H6Z94NTQbDXbfkYeq4IieZjsLlTzbySDnMA",[484,486],{"title":10,"path":6,"stem":7,"description":485,"children":-1},"Learn what Viio is and how you can integrate with the platform.",{"title":22,"path":18,"stem":19,"description":487,"children":-1},"Introduction to the Viio GraphQL API — endpoint, available resources, and how to get started.",1787319038267]