CINXE.COM
Agent Authorization | Text Platform Docs & API Reference
<!DOCTYPE html><html><head><meta name="viewport" content="width=device-width"/><meta charSet="utf-8"/><title>Agent Authorization | Text Platform Docs & API Reference</title><link rel="canonical" href="https://platform.text.com/docs/authorization/agent-authorization"/><link rel="preconnect" href="https://LATDYRDX9J-dsn.algolia.net" crossorigin="true"/><meta name="description" content="Learn how to authorize your app to send a sample request using our Messaging APIs. A step-by-step tutorial that guides you through the process."/><meta property="og:title" content="Agent Authorization"/><meta property="og:description" content="Learn how to authorize your app to send a sample request using our Messaging APIs. A step-by-step tutorial that guides you through the process."/><meta property="og:type" content="website"/><meta property="og:image" content="https://platform.text.com/docs/images/text-docs-og.png"/><link rel="icon" href="/docs/images/favicon.ico"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:creator" content="@textplatform"/><meta name="twitter:title" content="Agent Authorization"/><meta name="twitter:description" content="Learn how to authorize your app to send a sample request using our Messaging APIs. A step-by-step tutorial that guides you through the process."/><meta name="twitter:image" content="https://platform.text.com/docs/images/livechat-docs-og.png"/><script type="text/javascript"> window.__lc = window.__lc || {}; window.__lc.license = 1520; ;(function(n,t,c){function i(n){return e._h?e._h.apply(null,n):e._q.push(n)}var e={_q:[],_h:null,_v:"2.0",on:function(){i(["on",c.call(arguments)])},once:function(){i(["once",c.call(arguments)])},off:function(){i(["off",c.call(arguments)])},get:function(){if(!e._h)throw new Error("[LiveChatWidget] You can't use getters before load.");return i(["get",c.call(arguments)])},call:function(){i(["call",c.call(arguments)])},init:function(){var n=t.createElement("script");n.async=!0,n.type="text/javascript",n.src="https://cdn.livechatinc.com/staging/tracking.js",t.head.appendChild(n)}};!n.__lc.asyncInit&&e.init(),n.LiveChatWidget=n.LiveChatWidget||e}(window,document,[].slice)) </script><meta name="next-head-count" content="17"/><link rel="preload" href="/docs/_next/static/css/5c94b719b441ef6e576e.css" as="style"/><link rel="stylesheet" href="/docs/_next/static/css/5c94b719b441ef6e576e.css" data-n-g=""/><noscript data-n-css=""></noscript><link rel="preload" href="/docs/_next/static/chunks/webpack-af19fbe32e13fc779465.js" as="script"/><link rel="preload" href="/docs/_next/static/chunks/framework.57a22ac5870571c2eff5.js" as="script"/><link rel="preload" href="/docs/_next/static/chunks/commons.0889bf71124535c6c4cd.js" as="script"/><link rel="preload" href="/docs/_next/static/chunks/main-7bb61c4f8d40f1e634e9.js" as="script"/><link rel="preload" href="/docs/_next/static/chunks/pages/_app-cdbe91fdfdbd305577ef.js" as="script"/><link rel="preload" href="/docs/_next/static/chunks/f66b9295.f9eceaafe4216b86326e.js" as="script"/><link rel="preload" href="/docs/_next/static/chunks/b31dc3a52fd33fe1943f491eae223576a0413e10.ac30430b2138b8fefed8.js" as="script"/><link rel="preload" href="/docs/_next/static/chunks/067aff065064306958fa97cea949633bebf95d70.dede6f8249fbb82aff52.js" as="script"/><link rel="preload" href="/docs/_next/static/chunks/pages/authorization/agent-authorization-f8be7c47ea87c0ff6041.js" as="script"/> <script>!function(e){var n="https://s.go-mpulse.net/boomerang/";if("False"=="True")e.BOOMR_config=e.BOOMR_config||{},e.BOOMR_config.PageParams=e.BOOMR_config.PageParams||{},e.BOOMR_config.PageParams.pci=!0,n="https://s2.go-mpulse.net/boomerang/";if(window.BOOMR_API_key="SWHJY-Y2PHV-NVPM2-PDH42-VMPQS",function(){function e(){if(!o){var e=document.createElement("script");e.id="boomr-scr-as",e.src=window.BOOMR.url,e.async=!0,i.parentNode.appendChild(e),o=!0}}function t(e){o=!0;var n,t,a,r,d=document,O=window;if(window.BOOMR.snippetMethod=e?"if":"i",t=function(e,n){var t=d.createElement("script");t.id=n||"boomr-if-as",t.src=window.BOOMR.url,BOOMR_lstart=(new Date).getTime(),e=e||d.body,e.appendChild(t)},!window.addEventListener&&window.attachEvent&&navigator.userAgent.match(/MSIE [67]\./))return window.BOOMR.snippetMethod="s",void t(i.parentNode,"boomr-async");a=document.createElement("IFRAME"),a.src="about:blank",a.title="",a.role="presentation",a.loading="eager",r=(a.frameElement||a).style,r.width=0,r.height=0,r.border=0,r.display="none",i.parentNode.appendChild(a);try{O=a.contentWindow,d=O.document.open()}catch(_){n=document.domain,a.src="javascript:var d=document.open();d.domain='"+n+"';void(0);",O=a.contentWindow,d=O.document.open()}if(n)d._boomrl=function(){this.domain=n,t()},d.write("<bo"+"dy onload='document._boomrl();'>");else if(O._boomrl=function(){t()},O.addEventListener)O.addEventListener("load",O._boomrl,!1);else if(O.attachEvent)O.attachEvent("onload",O._boomrl);d.close()}function a(e){window.BOOMR_onload=e&&e.timeStamp||(new Date).getTime()}if(!window.BOOMR||!window.BOOMR.version&&!window.BOOMR.snippetExecuted){window.BOOMR=window.BOOMR||{},window.BOOMR.snippetStart=(new Date).getTime(),window.BOOMR.snippetExecuted=!0,window.BOOMR.snippetVersion=12,window.BOOMR.url=n+"SWHJY-Y2PHV-NVPM2-PDH42-VMPQS";var i=document.currentScript||document.getElementsByTagName("script")[0],o=!1,r=document.createElement("link");if(r.relList&&"function"==typeof r.relList.supports&&r.relList.supports("preload")&&"as"in r)window.BOOMR.snippetMethod="p",r.href=window.BOOMR.url,r.rel="preload",r.as="script",r.addEventListener("load",e),r.addEventListener("error",function(){t(!0)}),setTimeout(function(){if(!o)t(!0)},3e3),BOOMR_lstart=(new Date).getTime(),i.parentNode.appendChild(r);else t(!1);if(window.addEventListener)window.addEventListener("load",a,!1);else if(window.attachEvent)window.attachEvent("onload",a)}}(),"".length>0)if(e&&"performance"in e&&e.performance&&"function"==typeof e.performance.setResourceTimingBufferSize)e.performance.setResourceTimingBufferSize();!function(){if(BOOMR=e.BOOMR||{},BOOMR.plugins=BOOMR.plugins||{},!BOOMR.plugins.AK){var n=""=="true"?1:0,t="",a="bdpnbet4tppcaz2g6f3a-f-484cdd0e5-clientnsv4-s.akamaihd.net",i="false"=="true"?2:1,o={"ak.v":"39","ak.cp":"1461330","ak.ai":parseInt("908031",10),"ak.ol":"0","ak.cr":2,"ak.ipv":4,"ak.proto":"http/1.1","ak.rid":"bc0b39b","ak.r":6099,"ak.a2":n,"ak.m":"b","ak.n":"essl","ak.bpcip":"8.222.208.0","ak.cport":51756,"ak.gh":"124.155.222.151","ak.quicv":"","ak.tlsv":"tls1.2","ak.0rtt":"","ak.0rtt.ed":"","ak.csrc":"-","ak.acc":"reno","ak.t":"1732702582","ak.ak":"hOBiQwZUYzCg5VSAfCLimQ==OMkrTg4Ft75Op4ZJaX+1TL+50Qz5Y0ExR8nN7mEDSiRChct+BToResFgilT+96OuSNoZNj4vNVv73jB5dUROFGLU3W9idpa8QWHYjOagF91HBWSgvjB3iH0NtStKg1lP0qedYBgmoAmMR/H6OMtCaxdsuTZKuIVIhaHvsNf2L1DLUZ6IdFUUIigxPpf9Kk+MkZgv8gshJeHRZ0IVM+CjraskFYmSESLa0olI8ll86/RL4zOrmszcfgZuSuMBwwkl75re4btq8VYsznZD63dl9k+jl/P6/7s9bOIUutEaO/2TSKcAkShlNGBu4T05OVwVphdDGcXXFoZP6A+Nm2vAOY2n51aiawnnRyz6FmfWWKvSVxWT/xcYgL32rrlfoYdQlISNqqwyt5llkBlJOX2fdRuOu5jsFgyBFGhWURgOJnQ=","ak.pv":"55","ak.dpoabenc":"","ak.tf":i};if(""!==t)o["ak.ruds"]=t;var r={i:!1,av:function(n){var t="http.initiator";if(n&&(!n[t]||"spa_hard"===n[t]))o["ak.feo"]=void 0!==e.aFeoApplied?1:0,BOOMR.addVar(o)},rv:function(){var e=["ak.bpcip","ak.cport","ak.cr","ak.csrc","ak.gh","ak.ipv","ak.m","ak.n","ak.ol","ak.proto","ak.quicv","ak.tlsv","ak.0rtt","ak.0rtt.ed","ak.r","ak.acc","ak.t","ak.tf"];BOOMR.removeVar(e)}};BOOMR.plugins.AK={akVars:o,akDNSPreFetchDomain:a,init:function(){if(!r.i){var e=BOOMR.subscribe;e("before_beacon",r.av,null,null),e("onbeacon",r.rv,null,null),r.i=!0}return this},is_complete:function(){return!0}}}}()}(window);</script></head><body><div id="__next"><style data-emotion-css="cvn8wj">.css-cvn8wj{font-family:Colfax,colfax-web,Proxima Nova,Open Sans,Gill Sans MT, Gill Sans,Corbel,Arial,sans-serif;background-color:#4a4a55;height:60px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;position:fixed;top:0;width:100%;z-index:99;}@media (min-width:768px){.css-cvn8wj{height:60px;}}</style><div class="css-cvn8wj"><style data-emotion-css="y9662z">.css-y9662z{background:#4a4a55;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;}</style><div class="css-y9662z"><style data-emotion-css="qqcdow">.css-qqcdow{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;font-size:15px;margin:0 20px;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:60px;}.css-qqcdow > a > svg{margin:0;display:block;height:24px;}</style><nav class="css-qqcdow"><style data-emotion-css="c2yzgf">.css-c2yzgf{color:white;-webkit-text-decoration:none;text-decoration:none;font-weight:500;white-space:nowrap;margin-left:8px;}.css-c2yzgf:hover{-webkit-text-decoration:none;text-decoration:none;color:white;}</style><a href="https://text.com/" class="css-c2yzgf"><style data-emotion-css="ofqsza">.css-ofqsza{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;justify-items:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:0.8em;height:40px;}.css-ofqsza .logo{margin:0;font-size:2em;font-weight:500;-webkit-letter-spacing:-0.01em;-moz-letter-spacing:-0.01em;-ms-letter-spacing:-0.01em;letter-spacing:-0.01em;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.css-ofqsza .adjacent{margin:0;font-size:1.8em;font-weight:500;line-height:34px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-letter-spacing:-0.5px;-moz-letter-spacing:-0.5px;-ms-letter-spacing:-0.5px;letter-spacing:-0.5px;}.css-ofqsza .carrier{font-weight:500;-webkit-animation-name:blink;animation-name:blink;-webkit-animation-duration:0.9s;animation-duration:0.9s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;}</style><header class="css-ofqsza"><span class="logo">text<span class="carrier">|</span></span></header></a><a href="/docs" class="css-c2yzgf">Platform Docs</a></nav><style data-emotion-css="16b59id">.css-16b59id{margin:0;padding:0;max-width:calc(100% - 60px);width:calc(100% - 60px);overflow-x:auto;overflow-y:hidden;display:none;margin-right:10px;margin-left:40px;}@media (min-width:1024px){.css-16b59id{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:32px;}}</style><div class="css-16b59id"><style data-emotion-css="11hjr56">.css-11hjr56{font-family:Colfax,colfax-web,Proxima Nova,Open Sans,Gill Sans MT, Gill Sans,Corbel,Arial,sans-serif;position:relative;display:inline-block;height:100%;color:#ffffff;font-weight:400;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.css-11hjr56:hover{cursor:default;}</style><div class="css-11hjr56">Platform<svg width="24" height="24" fill="#FFFFFF" class="rmi rmi-chevron-down undefined" viewBox="0 0 24 24"><path d="M7.41 8.58 12 13.17l4.59-4.59L18 10l-6 6-6-6 1.41-1.42z"></path></svg></div><div class="css-11hjr56">APIs & SDKs<svg width="24" height="24" fill="#FFFFFF" class="rmi rmi-chevron-down undefined" viewBox="0 0 24 24"><path d="M7.41 8.58 12 13.17l4.59-4.59L18 10l-6 6-6-6 1.41-1.42z"></path></svg></div><div class="css-11hjr56">Resources<svg width="24" height="24" fill="#FFFFFF" class="rmi rmi-chevron-down undefined" viewBox="0 0 24 24"><path d="M7.41 8.58 12 13.17l4.59-4.59L18 10l-6 6-6-6 1.41-1.42z"></path></svg></div></div><style data-emotion-css="1hppjzv">.css-1hppjzv{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}</style><div class="css-1hppjzv"><style data-emotion-css="7wgbw1">.css-7wgbw1{display:none;}@media (min-width:1024px){.css-7wgbw1{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:192px;margin-right:16px;}}</style><div class="DocSearch-Button-Desktop css-7wgbw1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div><style data-emotion-css="1i8rrts">.css-1i8rrts{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:100%;}@media (min-width:1024px){.css-1i8rrts{display:none;}}</style><div class="DocSearch-Button-Mobile css-1i8rrts"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div><p>...</p><style data-emotion-css="pskeb7">@media (min-width:1024px){.css-pskeb7{display:none;}}</style><style data-emotion-css="19rp0xe">.css-19rp0xe{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:16px;cursor:pointer;}@media (min-width:1024px){.css-19rp0xe{display:none;}}@media (min-width:1024px){.css-19rp0xe{display:none;}}</style><svg width="32px" height="28px" fill="#ffffff" class="rmi rmi-menu css-19rp0xe" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"></path></svg></div></div></div><style data-emotion-css="ov1ktg">.css-ov1ktg{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}</style><div class="css-ov1ktg"><style data-emotion-css="hpx2k5">.css-hpx2k5{border-right:1px solid #e2e2e4;height:50px;position:fixed;-webkit-transition:height 300ms;transition:height 300ms;display:block;bottom:0%;width:100%;opacity:1;z-index:10;box-shadow:0px 0px 8px rgba(0,0,0,0.25);background-color:white;}@media (min-width:768px){.css-hpx2k5{box-shadow:none;height:100vh;max-height:100vh;position:-webkit-sticky;position:sticky;top:60px;-webkit-transition:all 0s;transition:all 0s;width:260px;}}</style><aside class="css-hpx2k5"><style data-emotion-css="y8dejn">.css-y8dejn{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:white;padding:10px 14px;cursor:pointer;}@media (min-width:768px){.css-y8dejn{display:none;}}</style><div class="css-y8dejn"><svg style="transform:rotate(270deg);transition:transform 300ms" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z" fill="currentColor"></path><path d="M0 0h24v24H0z" fill="none"></path></svg>Agent Authorization</div><style data-emotion-css="v8mm6">.css-v8mm6{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}@media (min-width:768px){.css-v8mm6{display:none;}}</style><div class="css-v8mm6"><style data-emotion-css="1pjh3pd">.css-1pjh3pd{width:100%;color:#62626D;}.css-1pjh3pd:hover{cursor:pointer;-webkit-text-decoration:none;text-decoration:none;background-color:#f6f6f7;}</style><a class="css-1pjh3pd"><style data-emotion-css="1yw2pv4">.css-1yw2pv4{padding:4px 14px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:16px;}</style><div class="css-1yw2pv4"><style data-emotion-css="5c7uuc">.css-5c7uuc{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:start;-webkit-justify-content:start;-ms-flex-pack:start;justify-content:start;}</style><div class="css-5c7uuc"><svg width="24" height="20px" fill="#62626D" class="rmi rmi-home undefined" viewBox="0 0 24 24"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8h5z"></path></svg></div>Home</div></a></div><style data-emotion-css="1ln71vl">.css-1ln71vl{overflow:scroll;height:calc(100% - 90px);}@media (min-width:768px){.css-1ln71vl{height:calc(100% - 60px);position:fixed;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;max-height:100vh;position:-webkit-sticky;position:-webkit-sticky;position:sticky;top:0;margin-top:8px;}}</style><div class="css-1ln71vl"><style data-emotion-css="1psvkz3">.css-1psvkz3{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-right:10px;font-weight:500;font-size:16px;border-radius:0px 8px 8px 0px;}.css-1psvkz3:hover{background-color:#f6f6f7;}</style><div class="css-1psvkz3"><style data-emotion-css="19nl305">.css-19nl305{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#62626D;width:100%;}.css-19nl305:hover{color:#4284F5;cursor:pointer;-webkit-text-decoration:none;text-decoration:none;}</style><a class="css-19nl305"><style data-emotion-css="2hhlpj">.css-2hhlpj{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:6px 16px 6px 20px;margin-right:10px;font-weight:500;font-size:16px;border-radius:0px 8px 8px 0px;width:100%;}.css-2hhlpj:hover{background-color:#f6f6f7;}</style><div class="css-2hhlpj"><style data-emotion-css="oe3dsw">.css-oe3dsw{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-right:8px;}</style><div class="css-oe3dsw"><svg fill="#424D57" width="12px" height="16px" viewBox="0 0 12 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink"><path d="M1.5,0.5 C0.675,0.5 0.0075,1.175 0.0075,2 L0,14 C0,14.825 0.6675,15.5 1.4925,15.5 L10.5,15.5 C11.325,15.5 12,14.825 12,14 L12,5 L7.5,0.5 L1.5,0.5 Z M6.75,5.75 L6.75,1.625 L10.875,5.75 L6.75,5.75 Z" fill-rule="nonzero" fill="currentColor"></path></svg></div>Authorization Overview</div></a></div><div class="css-1psvkz3"><a class="css-19nl305"><div class="css-2hhlpj"><div class="css-oe3dsw"><svg fill="#424D57" width="12px" height="16px" viewBox="0 0 12 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink"><path d="M1.5,0.5 C0.675,0.5 0.0075,1.175 0.0075,2 L0,14 C0,14.825 0.6675,15.5 1.4925,15.5 L10.5,15.5 C11.325,15.5 12,14.825 12,14 L12,5 L7.5,0.5 L1.5,0.5 Z M6.75,5.75 L6.75,1.625 L10.875,5.75 L6.75,5.75 Z" fill-rule="nonzero" fill="currentColor"></path></svg></div>Authorizing API calls</div></a></div><style data-emotion-css="1gg9bms">.css-1gg9bms{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-right:10px;font-weight:600;font-size:16px;border-radius:0px 8px 8px 0px;}.css-1gg9bms:hover{background-color:#f6f6f7;}</style><div class="css-1gg9bms"><style data-emotion-css="17iyluq">.css-17iyluq{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#4284F5;width:100%;}.css-17iyluq:hover{color:#4284F5;cursor:pointer;-webkit-text-decoration:none;text-decoration:none;}</style><a class="css-17iyluq"><div class="css-2hhlpj"><div class="css-oe3dsw"><svg fill="#424D57" width="12px" height="16px" viewBox="0 0 12 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink"><path d="M1.5,0.5 C0.675,0.5 0.0075,1.175 0.0075,2 L0,14 C0,14.825 0.6675,15.5 1.4925,15.5 L10.5,15.5 C11.325,15.5 12,14.825 12,14 L12,5 L7.5,0.5 L1.5,0.5 Z M6.75,5.75 L6.75,1.625 L10.875,5.75 L6.75,5.75 Z" fill-rule="nonzero" fill="currentColor"></path></svg></div>Agent Authorization</div></a></div><div class="css-1psvkz3"><a class="css-19nl305"><div class="css-2hhlpj"><div class="css-oe3dsw"><svg fill="#424D57" width="12px" height="16px" viewBox="0 0 12 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink"><path d="M1.5,0.5 C0.675,0.5 0.0075,1.175 0.0075,2 L0,14 C0,14.825 0.6675,15.5 1.4925,15.5 L10.5,15.5 C11.325,15.5 12,14.825 12,14 L12,5 L7.5,0.5 L1.5,0.5 Z M6.75,5.75 L6.75,1.625 L10.875,5.75 L6.75,5.75 Z" fill-rule="nonzero" fill="currentColor"></path></svg></div>Customer Authorization</div></a></div><div class="css-1psvkz3"><a class="css-19nl305"><div class="css-2hhlpj"><div class="css-oe3dsw"><svg fill="#424D57" width="12px" height="16px" viewBox="0 0 12 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink"><path d="M1.5,0.5 C0.675,0.5 0.0075,1.175 0.0075,2 L0,14 C0,14.825 0.6675,15.5 1.4925,15.5 L10.5,15.5 C11.325,15.5 12,14.825 12,14 L12,5 L7.5,0.5 L1.5,0.5 Z M6.75,5.75 L6.75,1.625 L10.875,5.75 L6.75,5.75 Z" fill-rule="nonzero" fill="currentColor"></path></svg></div>Scopes</div></a></div><div class="css-1psvkz3"><a class="css-19nl305"><div class="css-2hhlpj"><div class="css-oe3dsw"><svg fill="#424D57" width="12px" height="16px" viewBox="0 0 12 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink"><path d="M1.5,0.5 C0.675,0.5 0.0075,1.175 0.0075,2 L0,14 C0,14.825 0.6675,15.5 1.4925,15.5 L10.5,15.5 C11.325,15.5 12,14.825 12,14 L12,5 L7.5,0.5 L1.5,0.5 Z M6.75,5.75 L6.75,1.625 L10.875,5.75 L6.75,5.75 Z" fill-rule="nonzero" fill="currentColor"></path></svg></div>Sign in with LiveChat</div></a></div><div class="css-1psvkz3"><a class="css-19nl305"><div class="css-2hhlpj"><div class="css-oe3dsw"><svg fill="#424D57" width="12px" height="16px" viewBox="0 0 12 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink"><path d="M1.5,0.5 C0.675,0.5 0.0075,1.175 0.0075,2 L0,14 C0,14.825 0.6675,15.5 1.4925,15.5 L10.5,15.5 C11.325,15.5 12,14.825 12,14 L12,5 L7.5,0.5 L1.5,0.5 Z M6.75,5.75 L6.75,1.625 L10.875,5.75 L6.75,5.75 Z" fill-rule="nonzero" fill="currentColor"></path></svg></div>Authorization in practice</div></a></div><div class="css-1psvkz3"><a class="css-19nl305"><div class="css-2hhlpj"><div class="css-oe3dsw"><svg fill="#424D57" width="12px" height="16px" viewBox="0 0 12 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink"><path d="M1.5,0.5 C0.675,0.5 0.0075,1.175 0.0075,2 L0,14 C0,14.825 0.6675,15.5 1.4925,15.5 L10.5,15.5 C11.325,15.5 12,14.825 12,14 L12,5 L7.5,0.5 L1.5,0.5 Z M6.75,5.75 L6.75,1.625 L10.875,5.75 L6.75,5.75 Z" fill-rule="nonzero" fill="currentColor"></path></svg></div>Authorization FAQ</div></a></div><div class="css-1psvkz3"><a class="css-19nl305"><div class="css-2hhlpj"><div class="css-oe3dsw"><svg fill="#424D57" width="12px" height="16px" viewBox="0 0 12 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink"><path d="M1.5,0.5 C0.675,0.5 0.0075,1.175 0.0075,2 L0,14 C0,14.825 0.6675,15.5 1.4925,15.5 L10.5,15.5 C11.325,15.5 12,14.825 12,14 L12,5 L7.5,0.5 L1.5,0.5 Z M6.75,5.75 L6.75,1.625 L10.875,5.75 L6.75,5.75 Z" fill-rule="nonzero" fill="currentColor"></path></svg></div>Global Accounts</div></a></div><div class="css-1psvkz3"><a class="css-19nl305"><div class="css-2hhlpj"><div class="css-oe3dsw"><svg fill="#424D57" width="12px" height="16px" viewBox="0 0 12 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink"><path d="M1.5,0.5 C0.675,0.5 0.0075,1.175 0.0075,2 L0,14 C0,14.825 0.6675,15.5 1.4925,15.5 L10.5,15.5 C11.325,15.5 12,14.825 12,14 L12,5 L7.5,0.5 L1.5,0.5 Z M6.75,5.75 L6.75,1.625 L10.875,5.75 L6.75,5.75 Z" fill-rule="nonzero" fill="currentColor"></path></svg></div>Global Accounts API</div></a></div><div class="css-1psvkz3"><a class="css-19nl305"><div class="css-2hhlpj"><div class="css-oe3dsw"><svg fill="#424D57" width="12px" height="16px" viewBox="0 0 12 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink"><path d="M1.5,0.5 C0.675,0.5 0.0075,1.175 0.0075,2 L0,14 C0,14.825 0.6675,15.5 1.4925,15.5 L10.5,15.5 C11.325,15.5 12,14.825 12,14 L12,5 L7.5,0.5 L1.5,0.5 Z M6.75,5.75 L6.75,1.625 L10.875,5.75 L6.75,5.75 Z" fill-rule="nonzero" fill="currentColor"></path></svg></div>Customer Accounts API</div></a></div></div></aside><style data-emotion-css="1g06r20">.css-1g06r20{padding-bottom:30vh;position:relative;width:100%;}@media (min-width:768px){.css-1g06r20{width:calc(100% - 258px);max-width:900px;}}</style><div class="css-1g06r20"><style data-emotion-css="c8i9h7">.css-c8i9h7{margin-top:120px;padding:0px 30px;}@media (min-width:768px){.css-c8i9h7{padding:0px 60px;}}.css-c8i9h7.redoc{margin-top:60px;display:block;}</style><article class=" css-c8i9h7"><style data-emotion-css="1lyzzun">.css-1lyzzun{margin:3em 0 1em;padding:2em 0 1em;}</style><div class="css-1lyzzun"><style data-emotion-css="12qxxrf">.css-12qxxrf{margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;font-weight:500;text-rendering:optimizeLegibility;font-size:2.25rem;line-height:1.1;-webkit-letter-spacing:-0.02em;-moz-letter-spacing:-0.02em;-ms-letter-spacing:-0.02em;letter-spacing:-0.02em;}@media (min-width:768px){.css-12qxxrf{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;}}</style><h2 id="agent-authorization" class="css-12qxxrf"><span>Agent Authorization</span><style data-emotion-css="1g0dr3m">.css-1g0dr3m{margin-top:8px;}.css-1g0dr3m > label{margin:0 0 5px 0;}.css-1g0dr3m label + div{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;}</style></h2></div><style data-emotion-css="1679d3t">.css-1679d3t{border-bottom:1px solid #e0e4e9;padding-bottom:0.5em;}</style><h2 class="heading css-1679d3t"><style data-emotion-css="180507a">.css-180507a{color:inherit;-webkit-text-decoration:none;text-decoration:none;position:relative;}.css-180507a:hover{color:inherit;-webkit-text-decoration:none;text-decoration:none;}.css-180507a:hover:before{content:"#";position:absolute;font-weight:300;left:-1em;top:1px;opacity:0.3;}.css-180507a:focus-visible{outline-width:0px;}</style><a id="introduction" href="#introduction" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#introduction"><span class="icon icon-link"></span></a>Introduction</a></h2><p>The authorization methods described in this document may be used to work with both LiveChat and HelpDesk products. You need to authorize your calls with an access token to call the APIs of any of these two products. This document describes three authorization flows that let you acquire a token:</p><ul><li>Personal Access Token</li><li>Implicit flow</li><li>Authorization code grant</li></ul><p>With the acquired token, you can the following APIs on behalf of an agent:</p><ul><li>the Agent Chat API</li><li>the Configuration API</li><li>LiveChat Accounts API</li><li>HelpDesk API</li><li>Reports API</li><li>Text API</li></ul><p>To make calls to Customer Chat API, you need a different <code>access_token</code>. For that, see <a href="/docs/authorization/customer-authorization">Customer Authorization</a>.</p><h3 class="heading"><a id="postman-collection" href="#postman-collection" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#postman-collection"><span class="icon icon-link"></span></a>Postman collection</a></h3><p>You can find all the requests from the Agent and Customer authorization flows in Postman. Remember to replace sample parameters with your own.</p><p><a href="https://god.gw.postman.com/run-collection/20754404-ab4b398a-f906-4431-a17c-2f6673f0b8e8?action=collection%2Ffork&collection-url=entityId%3D20754404-ab4b398a-f906-4431-a17c-2f6673f0b8e8%26entityType%3Dcollection%26workspaceId%3D5e6fb31b-587b-4258-b215-4dccaae38a38"><div style="max-width:123px"><style data-emotion-css="v3memn">.css-v3memn{display:block;max-width:100%;overflow:hidden;position:relative;box-sizing:border-box;margin-top:0;margin-left:0;margin-right:0;margin-bottom:10px;}</style><div class="css-v3memn"><style data-emotion-css="sa8835">.css-sa8835{box-sizing:border-box;display:block;max-width:100%;padding-top:calc(30 / 123 * 100%);}</style><div class="css-sa8835"><style data-emotion-css="5r33xa">.css-5r33xa{position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%;}</style><img alt="Run in Postman" src="https://run.pstmn.io/button.svg" decoding="async" class="css-5r33xa"/></div></div></div></a></p><h2 class="heading css-1679d3t"><a id="personal-access-tokens" href="#personal-access-tokens" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#personal-access-tokens"><span class="icon icon-link"></span></a>Personal Access Tokens</a></h2><p>Unlike other authorization flows that let you acquire a token for your app, <strong>Personal Access Tokens (PATs)</strong> are generated per Agent. PATs are great when you want to make a quick call to the LiveChat API or test out the app you're working on.</p><p>To sign a request with a Personal Access Token, you need to:</p><ol><li>Create a PAT in <a target="_blank" href="https://platform.text.com/console">Developer Console</a>.</li><li>Use your <code>account_id</code> and PAT in the <strong>Basic authentication scheme</strong> to send a request.</li></ol><h3 class="heading"><a id="step-1-generate-a-pat" href="#step-1-generate-a-pat" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#step-1-generate-a-pat"><span class="icon icon-link"></span></a>Step 1: Generate a PAT</a></h3><p>Start in <a target="_blank" href="https://platform.text.com/console/">Developer Console</a>. Then, go to <strong>Settings > Authorization > Personal Access Tokens</strong> and create a new token together with necessary <a href="/docs/authorization/scopes">scopes</a>. You won't be able to change those scopes once you create the token.</p><div class="css-v3memn"><style data-emotion-css="1ooxlly">.css-1ooxlly{box-sizing:border-box;display:block;max-width:100%;padding-top:calc(1262 / 2142 * 100%);}</style><div class="css-1ooxlly"><img alt="LiveChat Personal Access Tokens" src="/docs/images/authorization/livechat-personal-access-token.png" decoding="async" class="css-5r33xa"/></div></div><h3 class="heading"><a id="step-2-use-your-credentials-to-send-the-request" href="#step-2-use-your-credentials-to-send-the-request" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#step-2-use-your-credentials-to-send-the-request"><span class="icon icon-link"></span></a>Step 2: Use your credentials to send the request</a></h3><p>Personal Access Tokens use the <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication#Basic_authentication_scheme/">Basic authentication scheme</a>. For that reason, you need a username and a password. Please note that with Basic Auth, you need to encode your credentials using <strong>base64</strong>.</p><p>Use:</p><ul><li><strong>Account ID</strong> as the <strong>username</strong> for the <a href="/docs/messaging/agent-chat-api">Agent Chat API v3</a>, <a href="/docs/management/configuration-api">Configuration API v3</a>, <a href="/docs/authorization/global-accounts-api">Global Accounts API</a>, and <a href="https://api.helpdesk.com/docs">HelpDesk API</a></li><li><strong>Entity ID (your LiveChat login)</strong> as the <strong>username</strong> for the <a href="/docs/management/configuration-api/v2.0">Configuration API v2</a> (the deprecated version)</li><li><strong>PAT</strong> as the <strong>password</strong> for the APIs v2 (the deprecated version) and v3</li></ul><p>Once you have your credentials, you can call the Agent Chat API, Configuration API, LiveChat Accounts API, or HelpDesk API. Other LiveChat APIs don't support PAT authorization.</p><h2 class="heading css-1679d3t"><a id="implicit-grant" href="#implicit-grant" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#implicit-grant"><span class="icon icon-link"></span></a>Implicit grant</a></h2><p>Implicit grant is an authorization flow recommended for JavaScript web apps, but it works for both types: <strong>JavaScript</strong> and <strong>server-side</strong> apps.</p><p>To set up your own web app, you must define the URL of the app and the list of scopes. Scopes determine which parts of a LiveChat user's account your app will have access to. A LiveChat customer who enters your app URL will be asked to enter their login and password and grant the access for your app. Then, the user is redirected to your app with <code>access_token</code> included in the URL.</p><p>There are a few steps in the process:</p><ul><li><strong>Step 1:</strong> Create an app in Developer Console and configure the Authorization building block</li><li><strong>Step 2:</strong> Redirect the users of your app to the LiveChat OAuth Server</li><li><strong>Step 3:</strong> Get an access token from the URL</li><li><strong>Step 4:</strong> Use the token in API calls</li></ul><div class="css-v3memn"><style data-emotion-css="sq8lei">.css-sq8lei{box-sizing:border-box;display:block;max-width:100%;padding-top:calc(546 / 800 * 100%);}</style><div class="css-sq8lei"><img alt="Implicit Grant LiveChat" src="/docs/images/authorization/implicit-grant.png" decoding="async" class="css-5r33xa"/></div></div><h3 class="heading"><a id="step-1-create-an-app" href="#step-1-create-an-app" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#step-1-create-an-app"><span class="icon icon-link"></span></a>Step 1: Create an app</a></h3><p>If you don't have an app yet, start by creating one in <a target="_blank" rel="noopener noreferrer" href="https://platform.text.com/console/">Developer Console</a>. The app is a LiveChat OAuth 2.1 Client with its <strong>Id</strong> and <strong>Secret</strong>. You need to configure the Authorization building block of your application. <a href="/docs/authorization/authorization-in-practice#step-1-configure-the-authorization-building-block">See the guide</a> to learn how to do that. Since this is the Implicit grant authorization flow, you won't use the <strong>Client Secret</strong> of your app. Feel free to skip the part about <strong>Client Secret</strong> in the guide; the rest applies without any change.</p><h3 class="heading"><a id="step-2-redirect-users-to-livechat-oauth-server" href="#step-2-redirect-users-to-livechat-oauth-server" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#step-2-redirect-users-to-livechat-oauth-server"><span class="icon icon-link"></span></a>Step 2: Redirect users to LiveChat OAuth Server</a></h3><p>When users run your app, they should be redirected to the LiveChat OAuth Server, which can be found under this URL:</p><style data-emotion-css="17buymi">.css-17buymi{width:100%;}@media (min-width:768px){.css-17buymi{padding:25px 25px 30px 0px;}}</style><div class="css-17buymi"><style data-emotion-css="16prjg8">.css-16prjg8{border:1px solid #e8e8e8;border-radius:6px;background-color:#505671;color:white;margin:0 0 20px;max-width:100%;--code-color:#f5fbff;--code-background:#505671;--code-string-color:#56d4bc;}</style><div class="css-16prjg8"><style data-emotion-css="13hnul0">.css-13hnul0{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:5px 15px;background-color:#383f54;border-radius:8px 8px 0 0;color:#dee5e8;}.css-13hnul0 code{font-size:12px;max-width:100%;-webkit-box-flex:2;-webkit-flex-grow:2;-ms-flex-positive:2;flex-grow:2;word-break:break-all;}.css-13hnul0 .code-sample-header{border:none;background-color:#383f54;color:#dee5e8;padding:0.2em 0;}</style><div class="css-13hnul0"><code class="code-sample-header">LIVECHAT OAUTH SERVER URL</code><style data-emotion-css="1sg2lsz">.css-1sg2lsz{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}</style><div class="css-1sg2lsz"><style data-emotion-css="1wp1vo7">.css-1wp1vo7{position:relative;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;width:45px;}</style><div class="css-1wp1vo7"><style data-emotion-css="xnt8k0">.css-xnt8k0{position:relative;min-height:18px;}</style><div class="css-xnt8k0"><style data-emotion-css="6oazep">.css-6oazep{position:absolute;top:0;left:0;right:0;text-align:right;text-transform:capitalize;line-height:20px;font-size:13px;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;opacity:0;-webkit-transition-delay:0.25s;transition-delay:0.25s;-webkit-transition:none;transition:none;}</style><div class="css-6oazep"><style data-emotion-css="11ycufd">.css-11ycufd{-webkit-box-flex:2;-webkit-flex-grow:2;-ms-flex-positive:2;flex-grow:2;max-width:100%;overflow-x:auto;}</style><div class="css-11ycufd">Copied!</div></div><style data-emotion-css="139ndot">.css-139ndot{position:absolute;top:0;right:0;text-align:right;max-width:24px;opacity:1;-webkit-transition-delay:0.25;transition-delay:0.25;-webkit-transition:opacity 0.25s ease-in-out;transition:opacity 0.25s ease-in-out;}.css-139ndot:hover{cursor:pointer;}</style><div class="css-139ndot"><svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 0 24 24" width="18px"><path d="M0 0h24v24H0V0z" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z" fill="currentColor"></path></svg></div></div></div></div></div><style data-emotion-css="ju12u0">.css-ju12u0{min-height:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;max-width:100%;overflow:scroll;}.css-ju12u0 code{display:inline-block;}</style><div class="css-ju12u0"><div class="remark-highlight"><pre class="language-url"><code class="language-url"><span class="token scheme">https<span class="token scheme-delimiter">:</span></span><span class="token authority"><span class="token authority-delimiter">//</span><span class="token host">accounts.livechat.com</span></span><span class="token path"><span class="token path-separator">/</span></span> </code></pre></div></div></div></div><style data-emotion-css="v24v0q">.css-v24v0q{max-width:830px;}</style><section class="css-v24v0q"><div class="css-11ycufd"><h5 class="heading"><a id="request" href="#request" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#request"><span class="icon icon-link"></span></a>Request</a></h5><style data-emotion-css="q76ucn">.css-q76ucn{width:100%;overflow-x:auto;}</style><div class="css-q76ucn"><table><thead><tr><th>Parameter</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td><code>response_type</code></td><td>yes</td><td>Value: <code>token</code></td></tr><tr><td><code>client_id</code></td><td>yes</td><td><strong>Client Id</strong> from Developer Console (Authorization block)</td></tr><tr><td><code>redirect_uri</code></td><td>yes</td><td>One of the URIs defined in the Authorization block during app configuration. The LiveChat OAuth Server will redirect the user back to this URI after successful authorization.</td></tr><tr><td><code>state</code></td><td>no</td><td>Any value that might be useful to your application. It's strongly recommended to include an anti-forgery token to mitigate the <a target="_blank" rel="noopener noreferrer" href="https://en.wikipedia.org/wiki/Cross-site_request_forgery">cross-site request forgery</a>.</td></tr><tr><td><code>prompt</code></td><td>no</td><td>Value: <code>consent</code>. <strong>For testing purposes.</strong> It forces the app to ask for access to certain resources. It’s necessary for you to test the app as if you were a user who installs the app from Marketplace.</td></tr></tbody></table></div></div><div class="css-17buymi"><div class="css-16prjg8"><div class="css-13hnul0"><code class="code-sample-header">EXAMPLE REDIRECTION TO LIVECHAT OAUTH SERVER</code><div class="css-1sg2lsz"><div class="css-1wp1vo7"><div class="css-xnt8k0"><div class="css-6oazep"><div class="css-11ycufd">Copied!</div></div><div class="css-139ndot"><svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 0 24 24" width="18px"><path d="M0 0h24v24H0V0z" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z" fill="currentColor"></path></svg></div></div></div></div></div><div class="css-ju12u0"><div class="remark-highlight"><pre class="language-shell"><code class="language-shell">https://accounts.livechat.com/ ?response_type<span class="token operator">=</span>token <span class="token operator">&</span><span class="token assign-left variable">client_id</span><span class="token operator">=</span>9cbf3a968289727cb3cdfe83ab1d9836 <span class="token operator">&</span><span class="token assign-left variable">redirect_uri</span><span class="token operator">=</span>https%3A%2F%2Fmy-application.com <span class="token operator">&</span><span class="token assign-left variable">state</span><span class="token operator">=</span>i8XNjC4b8KVok4uw5RftR38Wgp2BFwql </code></pre></div></div></div></div></section><p>At this point, the app should ask the user to allow it to access certain resources and perform certain actions. The list of resources and actions is automatically created based on the scopes selected for your app in Developer Console.</p><div style="max-width:600px"><div class="css-v3memn"><style data-emotion-css="n7v7fg">.css-n7v7fg{box-sizing:border-box;display:block;max-width:100%;padding-top:calc(485 / 600 * 100%);}</style><div class="css-n7v7fg"><img alt="LiveChat Access Grant Request Modal" src="/docs/images/authorization/grant-access-livechat.png" decoding="async" class="css-5r33xa"/></div></div></div><p>Keep in mind that as the app author, you won't see this screen. Use <code>prompt:consent</code> to verify this step from the user perspective. This step is also omitted for private web apps installed by Agents from the same license. </p><h3 class="heading"><a id="step-3-get-an-access-token-from-the-url" href="#step-3-get-an-access-token-from-the-url" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#step-3-get-an-access-token-from-the-url"><span class="icon icon-link"></span></a>Step 3: Get an access token from the URL</a></h3><p>After a user authorizes the app by clicking <strong>Allow</strong>, they are redirected back to your application (to the <strong>Redirect URI</strong> you specified in Developer Console). The URL includes a number of parameters, including the <code>access_token</code>.</p><section class="css-v24v0q"><div class="css-11ycufd"><h5 class="heading"><a id="response" href="#response" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#response"><span class="icon icon-link"></span></a>Response</a></h5><div class="css-q76ucn"><table><thead><tr><th>Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>access_token</code></td><td>The token you can use to call LiveChat APIs on behalf of the user.</td></tr><tr><td><code>expires_in</code></td><td>The number of seconds the <code>access_token</code> will be valid; 28800 sec by default. When it expires, you will need to repeat the authorization process to get the new <code>access_token</code>.</td></tr><tr><td><code>token_type</code></td><td>Value: <code>Bearer</code></td></tr><tr><td><code>state</code></td><td>The value of the <code>state</code> param that you passed to LiveChat OAuth Server in redirection.</td></tr></tbody></table></div><p>💡 <strong>Got stuck? See common</strong> <a href="/docs/authorization/authorizing-api-calls#errors"><strong>Errors</strong></a>.</p></div><div class="css-17buymi"><div class="css-16prjg8"><div class="css-13hnul0"><code class="code-sample-header">EXAMPLE REDIRECTION BACK TO THE APP</code><div class="css-1sg2lsz"><div class="css-1wp1vo7"><div class="css-xnt8k0"><div class="css-6oazep"><div class="css-11ycufd">Copied!</div></div><div class="css-139ndot"><svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 0 24 24" width="18px"><path d="M0 0h24v24H0V0z" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z" fill="currentColor"></path></svg></div></div></div></div></div><div class="css-ju12u0"><div class="remark-highlight"><pre class="language-shell"><code class="language-shell">https://my-application.com/ <span class="token comment">#access_token=dal%3Atest_DQTRHGbZCFkAoss4Q</span> <span class="token operator">&</span><span class="token assign-left variable">token_type</span><span class="token operator">=</span>Bearer <span class="token operator">&</span><span class="token assign-left variable">expires_in</span><span class="token operator">=</span><span class="token number">28800</span> <span class="token operator">&</span><span class="token assign-left variable">state</span><span class="token operator">=</span>i8XNjC4b8KVok4uw5RftR38Wgp2BFwql </code></pre></div></div></div></div></section><h3 class="heading"><a id="step-4-use-the-token-in-api-calls" href="#step-4-use-the-token-in-api-calls" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#step-4-use-the-token-in-api-calls"><span class="icon icon-link"></span></a>Step 4: Use the token in API calls</a></h3><p>Once you extract the token from the URL, your app can use it to sign requests to the LiveChat API. Your application should store the <code>access_token</code> in localStorage or a cookie until it expires. Caching the token prevents you from redirecting the user to LiveChat OAuth Server every time they visit your app.</p><h3 class="heading"><a id="example-implementation" href="#example-implementation" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#example-implementation"><span class="icon icon-link"></span></a>Example implementation</a></h3><p>This sample web app makes a call to Agent Chat API to <a href="/docs/messaging/agent-chat-api#get-customer">return the list of customers</a>, which is then logged in the console. The application uses the <strong>Implicit grant</strong> to get an access token.</p><div class="css-16prjg8"><div class="css-13hnul0"><code class="code-sample-header">index.html</code><div class="css-1sg2lsz"><div class="css-1wp1vo7"><div class="css-xnt8k0"><div class="css-6oazep"><div class="css-11ycufd">Copied!</div></div><div class="css-139ndot"><svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 0 24 24" width="18px"><path d="M0 0h24v24H0V0z" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z" fill="currentColor"></path></svg></div></div></div></div></div><div class="css-ju12u0"><div class="remark-highlight"><pre class="language-html"><code class="language-html"><span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">html</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>html</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>body</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>/get_customers.js<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token script"></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token keyword">function</span> <span class="token function">getHashParam</span><span class="token punctuation">(</span><span class="token parameter">key</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> params <span class="token operator">=</span> <span class="token dom variable">location</span><span class="token punctuation">.</span><span class="token property-access">hash</span><span class="token punctuation">.</span><span class="token method function property-access">substring</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token method function property-access">split</span><span class="token punctuation">(</span><span class="token string">"&"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> value <span class="token operator">=</span> params<span class="token punctuation">.</span><span class="token method function property-access">find</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token parameter">item</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword control-flow">return</span> item<span class="token punctuation">.</span><span class="token method function property-access">split</span><span class="token punctuation">(</span><span class="token string">"="</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">===</span> key<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword control-flow">return</span> value <span class="token operator">?</span> value<span class="token punctuation">.</span><span class="token method function property-access">split</span><span class="token punctuation">(</span><span class="token string">"="</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">:</span> <span class="token string">""</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">const</span> clientId <span class="token operator">=</span> <span class="token string">"bb9e5b2f1ab480e4a715977b7b1b4279"</span><span class="token punctuation">;</span> <span class="token comment">// Client Id of your app</span> <span class="token keyword">const</span> redirectUri <span class="token operator">=</span> <span class="token string">"https://get-customers-app.samplehosting.com/"</span><span class="token punctuation">;</span> <span class="token comment">// URL of your app</span> <span class="token keyword">const</span> accessToken <span class="token operator">=</span> <span class="token function">decodeURIComponent</span><span class="token punctuation">(</span><span class="token function">getHashParam</span><span class="token punctuation">(</span><span class="token string">"access_token"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword control-flow">if</span> <span class="token punctuation">(</span>accessToken<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">get_customers</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword control-flow">else</span> <span class="token punctuation">{</span> <span class="token dom variable">location</span><span class="token punctuation">.</span><span class="token property-access">href</span> <span class="token operator">=</span> <span class="token string">"https://accounts.livechat.com/"</span> <span class="token operator">+</span> <span class="token string">"?response_type=token"</span> <span class="token operator">+</span> <span class="token string">"&client_id="</span> <span class="token operator">+</span> clientId <span class="token operator">+</span> <span class="token string">"&redirect_uri="</span> <span class="token operator">+</span> redirectUri<span class="token punctuation">;</span> <span class="token punctuation">}</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>body</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>html</span><span class="token punctuation">></span></span> </code></pre></div></div></div><div class="css-16prjg8"><div class="css-13hnul0"><code class="code-sample-header">get_customers.js</code><div class="css-1sg2lsz"><div class="css-1wp1vo7"><div class="css-xnt8k0"><div class="css-6oazep"><div class="css-11ycufd">Copied!</div></div><div class="css-139ndot"><svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 0 24 24" width="18px"><path d="M0 0h24v24H0V0z" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z" fill="currentColor"></path></svg></div></div></div></div></div><div class="css-ju12u0"><div class="remark-highlight"><pre class="language-js"><code class="language-js"><span class="token keyword">const</span> <span class="token function-variable function">get_customers</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span> <span class="token function">fetch</span><span class="token punctuation">(</span><span class="token string">'https://api.livechatinc.com/v3.1/agent/action/get_customers'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token literal-property property">method</span><span class="token operator">:</span> <span class="token string">'post'</span><span class="token punctuation">,</span> <span class="token literal-property property">headers</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string-property property">'Content-type'</span><span class="token operator">:</span> <span class="token string">'application/json'</span><span class="token punctuation">,</span> <span class="token string-property property">'Authorization'</span><span class="token operator">:</span> <span class="token string">'Bearer '</span> <span class="token operator">+</span> accessToken<span class="token punctuation">,</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token literal-property property">body</span><span class="token operator">:</span> <span class="token known-class-name class-name">JSON</span><span class="token punctuation">.</span><span class="token method function property-access">stringify</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token punctuation">.</span><span class="token method function property-access">then</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">response</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> response<span class="token punctuation">.</span><span class="token method function property-access">json</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">.</span><span class="token method function property-access">then</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">data</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span> <span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span><span class="token string">'Request succeeded with JSON response'</span><span class="token punctuation">,</span> data<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token punctuation">.</span><span class="token keyword control-flow">catch</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">error</span><span class="token punctuation">)</span> <span class="token arrow operator">=></span> <span class="token punctuation">{</span> <span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span><span class="token string">'Request failed'</span><span class="token punctuation">,</span> error<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre></div></div></div><p>To make it work, run this app on localhost or <a href="/docs/getting-started/livechat-apps#creating-livechat-apps">deploy it to Firebase</a> to host it. Update <code>index.html</code> with your own <code>redirectUri</code> (link to your app) and <code>clientId</code>. Make sure to use the exact same Redirect URI in Developer Console. Also, to use the <strong>Get Customers</strong> method, your app needs the <code>customers:ro</code> scope, which you should select in Developer Console. When everything is ready, install the app privately for your license.</p><h2 class="heading css-1679d3t"><a id="authorization-code-grant" href="#authorization-code-grant" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#authorization-code-grant"><span class="icon icon-link"></span></a>Authorization code grant</a></h2><p>Authorization code grant flow is recommended for server-side apps. Unlike web apps, they can store confidential info, such as <strong>Client Secret</strong>, on a server without ever exposing it. When a user runs your app, they are redirected to the LiveChat OAuth Server only once. After successful authorization, the user is redirected back to your app along with a single-use authorization code. Then, your application exchanges the code for an access token and a refresh token using the Client Secret. From now on, the app can regenerate new access tokens without any action required from the user.</p><p>This flow is very similar to <strong>Implicit grant</strong>, but contains one additional step of exchanging the code for an access token.</p><p>The steps are as follows:</p><ul><li><strong>Step 1:</strong> Create an app in Developer Console and configure the Authorization building block</li><li><strong>Step 2:</strong> Redirect the users of your app to the LiveChat OAuth Server</li><li><strong>Step 3:</strong> Get a code from the URL</li><li><strong>Step 4:</strong> Exchange the code for an access token</li><li><strong>Step 5:</strong> Use the token in API calls</li></ul><div class="css-v3memn"><style data-emotion-css="1qaexnw">.css-1qaexnw{box-sizing:border-box;display:block;max-width:100%;padding-top:calc(580 / 800 * 100%);}</style><div class="css-1qaexnw"><img alt="LiveChat Public Server-Side Apps" src="/docs/images/authorization/livechat-authorization-code-grant.png" decoding="async" class="css-5r33xa"/></div></div><h3 class="heading"><a id="pkce-extension" href="#pkce-extension" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#pkce-extension"><span class="icon icon-link"></span></a>PKCE extension</a></h3><p>OAuth 2.1 introduces the <a target="_blank" href="https://oauth.net/2/pkce/">PKCE (Proof Key for Code Exchange)</a> extension for the Authorization code grant flow. It allows web applications to use the Authorization code grant flow, and also, enables the possibility to use custom schema redirects, like: <code>my_app: //</code> (especially useful with native applications).</p><p>The <strong>Authorization code grant flow with PKCE</strong> is recommended for both <strong>web apps</strong> and <strong>server-side apps</strong>. Since web app clients can't store Client Secrets securely, their Authorization code grant flow with PKCE differs from the one for server-side apps.</p><ul><li><strong>Web apps</strong> - Client Secret cannot be used, so it's not mandatory; refresh tokens rotate.</li><li><strong>Server-side apps</strong> - Client Secret is mandatory to exchange a code for an access token and to refresh a token; refresh tokens don't rotate.</li></ul><p>How does the Authorization code grant flow work with PKCE?</p><ul><li>The client generates <code>code_verifier</code> from the following characters: <code>[A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~"</code>. It's between 43 and 128 characters long.</li><li>The client generates <code>code_challenge</code> with <code>code_challenge_method</code> as follows:<ul><li><code>plain</code> - <code>code_challenge</code> = <code>code_verifier</code>, when no <code>code_challenge_method</code> is present, then <code>plain</code> is assumed.</li><li><code>S256</code> - <code>code_challenge</code> = <code>b64(s256(ascii(code_verifier)))</code> where <code>b64</code> is Base64 URL encoding and <code>s256</code> is the <code>SHA256</code> hash function.</li></ul></li><li>The client sends <code>code_challenge</code> in the authorization request.</li><li>The server responds with the code.</li><li>The client sends <code>code_verifier</code> during the exchane of the for an access token.</li><li>The server performs an additional validation for <code>code_challenge</code> and <code>code_verifier</code>. Upon successful validation, it returns the access token.</li></ul><p>💡 To see code samples with PKCE parameters, use the dropdown list.</p><div style="max-width:400px"><div class="css-v3memn"><style data-emotion-css="1mc01fn">.css-1mc01fn{box-sizing:border-box;display:block;max-width:100%;padding-top:calc(185 / 400 * 100%);}</style><div class="css-1mc01fn"><img alt="LiveChat code samples with PKCE" src="/docs/images/authorization/livechat-code-samples-versions-2x-small.png" decoding="async" class="css-5r33xa"/></div></div></div><h3 class="heading"><a id="step-1-create-an-app-1" href="#step-1-create-an-app-1" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#step-1-create-an-app-1"><span class="icon icon-link"></span></a>Step 1: Create an app</a></h3><p>If you don't have an app yet, start by creating one in <a href="https://platform.text.com/console/"><strong>Developer Console</strong></a>. The app is a LiveChat OAuth 2.1 Client with its <strong>Id</strong> and <strong>Secret</strong>. You need to configure the Authorization building block of your application. <a href="/docs/authorization/authorization-in-practice#step-1-configure-the-authorization-building-block">See the guide</a> to learn how to do that.</p><h3 class="heading"><a id="step-2-redirect-users-to-livechat-oauth-server-1" href="#step-2-redirect-users-to-livechat-oauth-server-1" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#step-2-redirect-users-to-livechat-oauth-server-1"><span class="icon icon-link"></span></a>Step 2: Redirect users to LiveChat OAuth Server</a></h3><p>When users run your app, they should be redirected to the LiveChat OAuth Server, which can be found under this URL:</p><div class="css-17buymi"><div class="css-16prjg8"><div class="css-13hnul0"><code class="code-sample-header">EXAMPLE REDIRECTION TO LIVECHAT OAUTH SERVER</code><div class="css-1sg2lsz"><div class="css-1wp1vo7"><div class="css-xnt8k0"><div class="css-6oazep"><div class="css-11ycufd">Copied!</div></div><div class="css-139ndot"><svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 0 24 24" width="18px"><path d="M0 0h24v24H0V0z" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z" fill="currentColor"></path></svg></div></div></div></div></div><div class="css-ju12u0"><div class="remark-highlight"><pre class="language-url"><code class="language-url"><span class="token scheme">https<span class="token scheme-delimiter">:</span></span><span class="token authority"><span class="token authority-delimiter">//</span><span class="token host">accounts.livechat.com</span></span><span class="token path"><span class="token path-separator">/</span></span> </code></pre></div></div></div></div><section class="css-v24v0q"><div class="css-11ycufd"><h5 class="heading"><a id="request-1" href="#request-1" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#request-1"><span class="icon icon-link"></span></a>Request</a></h5><div class="css-q76ucn"><table><thead><tr><th>Parameter</th><th>Required</th><th>Required with PKCE</th><th>Description</th></tr></thead><tbody><tr><td><code>response_type</code></td><td>yes</td><td>yes</td><td>Value: <code>code</code></td></tr><tr><td><code>client_id</code></td><td>yes</td><td>yes</td><td><strong>Client Id</strong> from Developer Console (Authorization block)</td></tr><tr><td><code>redirect_uri</code></td><td>yes</td><td>yes</td><td><code>redirect_uri</code> should be the same as <code>Direct installation URL</code> defined in the Authorization block during app configuration. The LiveChat OAuth Server will redirect the user back to this URI after successful authorization.</td></tr><tr><td><code>state</code></td><td>no</td><td>no</td><td>Any value that might be useful to your application. It's strongly recommended to include an anti-forgery token to mitigate the <a href="https://en.wikipedia.org/wiki/Cross-site_request_forgery">cross-site request forgery</a>.</td></tr><tr><td><code>code_challenge</code></td><td>no</td><td>yes</td><td>A string between 43 and 128 characters long.</td></tr><tr><td><code>code_challenge_method</code></td><td>-</td><td>no</td><td>Possible values: <code>s256</code> or <code>plain</code>; default: <code>plain</code>.</td></tr></tbody></table></div></div><div class="css-17buymi"><div class="css-16prjg8"><div class="css-13hnul0"><code class="code-sample-header">EXAMPLE REDIRECTION</code><div class="css-1sg2lsz"><style data-emotion-css="68tg3z">.css-68tg3z{padding:4px;padding:0;max-width:115px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0;border-radius:4px;color:#dee5e8;cursor:pointer;font-size:14px;font-weight:500;line-height:20px;outline:0;text-overflow:ellipsis;white-space:nowrap;}</style><select class="css-68tg3z"><option>Code grant</option><option>Code grant with PKCE</option></select><div class="css-1wp1vo7"><div class="css-xnt8k0"><div class="css-6oazep"><div class="css-11ycufd">Copied!</div></div><div class="css-139ndot"><svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 0 24 24" width="18px"><path d="M0 0h24v24H0V0z" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z" fill="currentColor"></path></svg></div></div></div></div></div><div class="css-ju12u0"><style data-emotion-css="is8b0c">.css-is8b0c{max-width:100%;}</style><div label="Code grant" class="css-is8b0c"><div class="remark-highlight"><pre class="language-shell"><code class="language-shell">https://accounts.livechat.com/ ?response_type<span class="token operator">=</span>code <span class="token operator">&</span><span class="token assign-left variable">client_id</span><span class="token operator">=</span>9cbf3a968289727cb3cdfe83ab1d9836 <span class="token operator">&</span><span class="token assign-left variable">redirect_uri</span><span class="token operator">=</span>https%3A%2F%2Fmy-application.com <span class="token operator">&</span><span class="token assign-left variable">state</span><span class="token operator">=</span>i8XNjC4b8KVok4uw5RftR38Wgp2BFwql </code></pre></div></div></div></div></div></section><p>At this point, the app should ask the user to allow it to access certain resources and perform certain actions. The list of resources and actions is automatically created based on the scopes selected for your app in Developer Console.</p><div class="css-v3memn"><style data-emotion-css="1v0v5oj">.css-1v0v5oj{box-sizing:border-box;display:block;max-width:100%;padding-top:calc(647 / 800 * 100%);}</style><div class="css-1v0v5oj"><img alt="Access Grant Request" src="/docs/images/authorization/grant-access-livechat.png" decoding="async" class="css-5r33xa"/></div></div><p>Keep in mind that as the app author, you won't see this screen. Use <code>prompt:consent</code> to verify this step from the user perspective. This step is also omitted for private server-side apps installed by Agents from the same license. </p><h3 class="heading"><a id="step-3-acquire-the-code" href="#step-3-acquire-the-code" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#step-3-acquire-the-code"><span class="icon icon-link"></span></a>Step 3: Acquire the code</a></h3><p>After a user authorizes the app by clicking <strong>Allow</strong>, they are redirected back to your application (to the <strong>Redirect URI</strong> you specified in Developer Console). The URL includes a number o parameters, including <code>code</code>.</p><section class="css-v24v0q"><div class="css-11ycufd"><h5 class="heading"><a id="request-2" href="#request-2" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#request-2"><span class="icon icon-link"></span></a>Request</a></h5><div class="css-q76ucn"><table><thead><tr><th>Parameter</th><th>Notes</th></tr></thead><tbody><tr><td><code>code</code></td><td>A single-use code you need to exchange it for an access token. It's only valid for a few minutes.</td></tr><tr><td><code>state</code></td><td>The value of the <code>state</code> param that you passed to LiveChat OAuth Server in redirection.</td></tr></tbody></table></div></div><div class="css-17buymi"><div class="css-16prjg8"><div class="css-13hnul0"><code class="code-sample-header">EXAMPLE REDIRECTION BACK TO THE APP</code><div class="css-1sg2lsz"><div class="css-1wp1vo7"><div class="css-xnt8k0"><div class="css-6oazep"><div class="css-11ycufd">Copied!</div></div><div class="css-139ndot"><svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 0 24 24" width="18px"><path d="M0 0h24v24H0V0z" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z" fill="currentColor"></path></svg></div></div></div></div></div><div class="css-ju12u0"><div class="remark-highlight"><pre class="language-shell"><code class="language-shell">https://my-application.com/ ?code<span class="token operator">=</span>test_7W91a-oMsCeLvIaQm6bTrgtp7 <span class="token operator">&</span><span class="token assign-left variable">state</span><span class="token operator">=</span>i8XNjC4b8KVok4uw5RftR38Wgp2BFwql </code></pre></div></div></div></div></section><section class="css-v24v0q"><div class="css-11ycufd"><h3 class="heading"><a id="step-4-exchange-code-for-access-token-and-refresh-token" href="#step-4-exchange-code-for-access-token-and-refresh-token" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#step-4-exchange-code-for-access-token-and-refresh-token"><span class="icon icon-link"></span></a>Step 4: Exchange code for access token and refresh token</a></h3><p>To exchange the <code>code</code> for an <code>access_token</code> and a <code>refresh_token</code>, you need to make an HTTP POST request to the following URL:</p><div class="remark-highlight"><pre class="language-shell"><code class="language-shell">https://accounts.livechat.com/v2/token </code></pre></div><h5 class="heading"><a id="request-3" href="#request-3" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#request-3"><span class="icon icon-link"></span></a>Request</a></h5><div class="css-q76ucn"><table><thead><tr><th>Parameter</th><th>Required</th><th>Required with PKCE <strong>server side app</strong></th><th>Required with PKCE <strong>javascript app</strong></th><th>Description</th></tr></thead><tbody><tr><td><code>grant_type</code></td><td>yes</td><td>yes</td><td>yes</td><td>Value: <code>authorization_code</code></td></tr><tr><td><code>code</code></td><td>yes</td><td>yes</td><td>yes</td><td>The authorization code returned from the request in the previous step.</td></tr><tr><td><code>client_id</code></td><td>yes</td><td>yes</td><td>yes</td><td><strong>Client Id</strong> from Developer Console (Authorization block)</td></tr><tr><td><code>client_secret</code></td><td>yes</td><td>yes</td><td>no</td><td>Unique, confidential identifier of your app from Developer Console (Authorization block).</td></tr><tr><td><code>redirect_uri</code></td><td>yes</td><td>yes</td><td>yes</td><td>The URI defined in Step 2. The LiveChat OAuth Server will redirect the user back to this URL after successful authorization.</td></tr><tr><td><code>code_verifier</code></td><td>no</td><td>yes</td><td>yes</td><td>The previously generated <code>code_verifier</code>.</td></tr></tbody></table></div><h5 class="heading"><a id="response-1" href="#response-1" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#response-1"><span class="icon icon-link"></span></a>Response</a></h5><p>The response is a JSON with the following parameters:</p><div class="css-q76ucn"><table><thead><tr><th>Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>access_token</code></td><td>A token you can use to call LiveChat APIs on behalf of the user.</td></tr><tr><td><code>account_id</code></td><td>The ID of the Agent's account</td></tr><tr><td><code>expires_in</code></td><td>A number in seconds specifying how long the <code>access_token</code> will be valid; 28800 sec by default. When it expires, you will need to generate a new <code>access_token</code> using <code>refresh_token</code> (read <a href="/docs/authorization/agent-authorization#using-the-refresh-token">Using the refresh token</a> for more details).</td></tr><tr><td><code>organization_id</code></td><td>The ID of the organization's account.</td></tr><tr><td><code>refresh_token</code></td><td>A token that can be used to generate new access tokens.</td></tr><tr><td><code>scope</code></td><td>A comma-separated list of permissions an <code>access_token</code> has.</td></tr><tr><td><code>token_type</code></td><td>Value: <code>Bearer</code></td></tr></tbody></table></div><p>💡 <strong>Got stuck? See common</strong> <a href="/docs/authorization/authorizing-api-calls#errors"><strong>Errors</strong></a>.</p></div><div class="css-17buymi"><div class="css-16prjg8"><div class="css-13hnul0"><code class="code-sample-header">EXCHANGE CODE FOR TOKEN</code><div class="css-1sg2lsz"><select class="css-68tg3z"><option>Code grant</option><option>Server-side app with PKCE</option><option>Web app with PKCE</option></select><div class="css-1wp1vo7"><div class="css-xnt8k0"><div class="css-6oazep"><div class="css-11ycufd">Copied!</div></div><div class="css-139ndot"><svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 0 24 24" width="18px"><path d="M0 0h24v24H0V0z" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z" fill="currentColor"></path></svg></div></div></div></div></div><div class="css-ju12u0"><div label="Code grant" class="css-is8b0c"><div class="remark-highlight"><pre class="language-shell"><code class="language-shell"><span class="token function">curl</span> <span class="token string">"https://accounts.livechat.com/v2/token"</span> <span class="token punctuation">\</span> -X POST <span class="token punctuation">\</span> -d <span class="token string">"grant_type=authorization_code&\ code=dal:test_tnlRmy73mg9eaFESA&\ client_id=9cbf3a968289727cb3cdfe83ab1d9836&\ client_secret=test_d7MEp1YYo3&\ redirect_uri=https://my-application.com"</span> </code></pre></div></div></div></div><style data-emotion-css="1vuwrgc">.css-1vuwrgc{border:1px solid #e8e8e8;border-radius:6px;background-color:#f1f6f8;min-height:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;margin:0 0 20px;max-width:100%;}.css-1vuwrgc .remark-highlight{min-height:0;}.css-1vuwrgc pre{min-height:0;}</style><div class="css-1vuwrgc"><style data-emotion-css="iwgofq">.css-iwgofq{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:5px 15px;height:42px;background-color:#dee5e8;border-radius:5px 5px 0 0;font-size:13px;text-transform:uppercase;-webkit-letter-spacing:0.04em;-moz-letter-spacing:0.04em;-ms-letter-spacing:0.04em;letter-spacing:0.04em;}</style><div class="css-iwgofq"><style data-emotion-css="w6gvpm">.css-w6gvpm{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}</style><span class="css-w6gvpm">Response</span> <div class="css-1wp1vo7"><div class="css-xnt8k0"><div class="css-6oazep"><div class="css-11ycufd">Copied!</div></div><div class="css-139ndot"><svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 0 24 24" width="18px"><path d="M0 0h24v24H0V0z" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z" fill="currentColor"></path></svg></div></div></div></div><div class="css-ju12u0"><div class="remark-highlight"><pre class="language-json"><code class="language-json"><span class="token punctuation">{</span> <span class="token property">"access_token"</span><span class="token operator">:</span> <span class="token string">"dal:test_YTJQ6GDVgQf8kQDPw"</span><span class="token punctuation">,</span> <span class="token property">"account_id"</span><span class="token operator">:</span> <span class="token string">"b7eff798-f8df-4364-8059-649c35c9ed0c"</span><span class="token punctuation">,</span> <span class="token property">"expires_in"</span><span class="token operator">:</span> <span class="token number">28800</span><span class="token punctuation">,</span> <span class="token property">"organization_id"</span><span class="token operator">:</span> <span class="token string">"390e44e6-f1e6-0368c-z6ddb-74g14508c2ex"</span><span class="token punctuation">,</span> <span class="token property">"refresh_token"</span><span class="token operator">:</span> <span class="token string">"dal:test_gfalskcakg2347o8326"</span><span class="token punctuation">,</span> <span class="token property">"scope"</span><span class="token operator">:</span> <span class="token string">"chats--all:ro,chats--all:rw"</span><span class="token punctuation">,</span> <span class="token property">"token_type"</span><span class="token operator">:</span> <span class="token string">"Bearer"</span> <span class="token punctuation">}</span> </code></pre></div></div></div></div></section><h3 class="heading"><a id="step-5-use-the-token-in-api-calls" href="#step-5-use-the-token-in-api-calls" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#step-5-use-the-token-in-api-calls"><span class="icon icon-link"></span></a>Step 5: Use the token in API calls</a></h3><p>Once you extract the token from the URL, your app can use it to sign requests to the LiveChat API. Your application should store the <code>access_token</code> in localStorage or a cookie until it expires. Caching the token prevents you from redirecting the user to LiveChat OAuth Server every time they visit your app.</p><section class="css-v24v0q"><div class="css-11ycufd"><h3 class="heading"><a id="using-the-refresh-token" href="#using-the-refresh-token" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#using-the-refresh-token"><span class="icon icon-link"></span></a>Using the refresh token</a></h3><p>When an <code>access_token</code> expires, your app needs to acquire a new one. To do that, it has to send an HTTP POST request using the <code>refresh_token</code>.</p><div class="remark-highlight"><pre class="language-url"><code class="language-url"><span class="token scheme">https<span class="token scheme-delimiter">:</span></span><span class="token authority"><span class="token authority-delimiter">//</span><span class="token host">accounts.livechat.com</span></span><span class="token path"><span class="token path-separator">/</span>v2<span class="token path-separator">/</span>token</span> </code></pre></div><h5 class="heading"><a id="request-4" href="#request-4" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#request-4"><span class="icon icon-link"></span></a>Request</a></h5><div class="css-q76ucn"><table><thead><tr><th>Parameter</th><th>Required</th><th>Required with PKCE <strong>server side app</strong></th><th>Required with PKCE <strong>javascript app</strong></th><th>Description</th></tr></thead><tbody><tr><td><code>grant_type</code></td><td>yes</td><td>yes</td><td>yes</td><td>Value: <code>refresh_token</code></td></tr><tr><td><code>refresh_token</code></td><td>yes</td><td>yes</td><td>yes</td><td>The refresh token returned from when exchanging the <code>code</code>.</td></tr><tr><td><code>client_id</code></td><td>yes</td><td>yes</td><td>yes</td><td><strong>Client Id</strong> from Developer Console (Authorization block)</td></tr><tr><td><code>client_secret</code></td><td>yes</td><td>yes</td><td>no</td><td>Unique, confidential identifier of your app from Developer Console (Authorization block).</td></tr></tbody></table></div><h5 class="heading"><a id="response-2" href="#response-2" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#response-2"><span class="icon icon-link"></span></a>Response</a></h5><p>The response is a JSON with the following parameters:</p><div class="css-q76ucn"><table><thead><tr><th>Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>access_token</code></td><td>A token you can use to call LiveChat APIs on behalf of the user.</td></tr><tr><td><code>account_id</code></td><td>The ID of the Agent's account</td></tr><tr><td><code>expires_in</code></td><td>A number in seconds specifying how long the <code>access_token</code> will be valid. When it expires, you will need to generate a new <code>access_token</code> using <code>refresh_token</code> (read <a href="/docs/authorization/agent-authorization#using-the-refresh-token">Using the refresh token</a> for more details).</td></tr><tr><td><code>organization_id</code></td><td>the ID of the organization's account.</td></tr><tr><td><code>scope</code></td><td>A comma-separated list of permissions an <code>access_token</code> has.</td></tr><tr><td><code>refresh_token</code></td><td>A token that can be used to generate new access tokens.</td></tr><tr><td><code>token_type</code></td><td>Value: <code>Bearer</code></td></tr></tbody></table></div><p>💡 <strong>Got stuck? See common</strong> <a href="/docs/authorization/authorizing-api-calls#errors"><strong>Errors</strong></a>.</p></div><div class="css-17buymi"><div class="css-16prjg8"><div class="css-13hnul0"><code class="code-sample-header">GET A NEW ACCESS TOKEN</code><div class="css-1sg2lsz"><select class="css-68tg3z"><option>Server-side app</option><option>Web app</option></select><div class="css-1wp1vo7"><div class="css-xnt8k0"><div class="css-6oazep"><div class="css-11ycufd">Copied!</div></div><div class="css-139ndot"><svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 0 24 24" width="18px"><path d="M0 0h24v24H0V0z" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z" fill="currentColor"></path></svg></div></div></div></div></div><div class="css-ju12u0"><div label="Server-side app" class="css-is8b0c"><div class="remark-highlight"><pre class="language-shell"><code class="language-shell"><span class="token function">curl</span> <span class="token string">"https://accounts.livechat.com/v2/token"</span> <span class="token punctuation">\</span> -X POST <span class="token punctuation">\</span> -d <span class="token string">"grant_type=refresh_token&\ refresh_token=dal:test_gfalskcakg2347o8326&\ client_id=9cbf3a968289727cb3cdfe83ab1d9836&\ client_secret=test_d7MEp1YYo3"</span> </code></pre></div></div></div></div><div class="css-1vuwrgc"><div class="css-iwgofq"><span class="css-w6gvpm">response</span> <div class="css-1wp1vo7"><div class="css-xnt8k0"><div class="css-6oazep"><div class="css-11ycufd">Copied!</div></div><div class="css-139ndot"><svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 0 24 24" width="18px"><path d="M0 0h24v24H0V0z" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z" fill="currentColor"></path></svg></div></div></div></div><div class="css-ju12u0"><div class="remark-highlight"><pre class="language-json"><code class="language-json"><span class="token punctuation">{</span> <span class="token property">"access_token"</span><span class="token operator">:</span> <span class="token string">"dal:test_YTJQ6GDVgQf8kQDPw"</span><span class="token punctuation">,</span> <span class="token property">"account_id"</span><span class="token operator">:</span> <span class="token string">"b7eff798-f8df-4364-8059-649c35c9ed0c"</span><span class="token punctuation">,</span> <span class="token property">"expires_in"</span><span class="token operator">:</span> <span class="token number">28800</span><span class="token punctuation">,</span> <span class="token property">"organization_id"</span><span class="token operator">:</span> <span class="token string">"390e44e6-f1e6-0368c-z6ddb-74g14508c2ex"</span><span class="token punctuation">,</span> <span class="token property">"scope"</span><span class="token operator">:</span> <span class="token string">"chats--all:ro,chats--all:rw"</span><span class="token punctuation">,</span> <span class="token property">"refresh_token"</span><span class="token operator">:</span> <span class="token string">"dal:test_gfalskcakg2347o8326"</span><span class="token punctuation">,</span> <span class="token property">"token_type"</span><span class="token operator">:</span> <span class="token string">"Bearer"</span> <span class="token punctuation">}</span> </code></pre></div></div></div></div></section><section class="css-v24v0q"><div class="css-11ycufd"><h3 class="heading"><a id="revoking-tokens" href="#revoking-tokens" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#revoking-tokens"><span class="icon icon-link"></span></a>Revoking tokens</a></h3><p>In some cases, a user may wish to revoke the access (the token) given to your application. The token can be either an access token or a refresh token. If it's an access token with a corresponding refresh token, both tokens will be revoked. To revoke a token, make a DELETE HTTP request to the following URL:</p><div class="remark-highlight"><pre class="language-url"><code class="language-url"><span class="token scheme">https<span class="token scheme-delimiter">:</span></span><span class="token authority"><span class="token authority-delimiter">//</span><span class="token host">accounts.livechat.com</span></span><span class="token path"><span class="token path-separator">/</span>v2<span class="token path-separator">/</span>token</span> </code></pre></div><p>Code snippets present two alternative ways of making the same request.</p><h5 class="heading"><a id="request-5" href="#request-5" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#request-5"><span class="icon icon-link"></span></a>Request</a></h5><div class="css-q76ucn"><table><thead><tr><th>Parameter</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td><code>code</code></td><td>yes</td><td>The value of the <code>access_token</code> or the <code>refresh_token</code> to revoke</td></tr></tbody></table></div><p>💡 <strong>Got stuck? See common</strong> <a href="/docs/authorization/authorizing-api-calls#errors"><strong>Errors</strong></a>.</p></div><div class="css-17buymi"><div class="css-16prjg8"><div class="css-13hnul0"><code class="code-sample-header">REVOKE A TOKEN</code><div class="css-1sg2lsz"><select class="css-68tg3z"><option>Header</option><option>URL param</option></select><div class="css-1wp1vo7"><div class="css-xnt8k0"><div class="css-6oazep"><div class="css-11ycufd">Copied!</div></div><div class="css-139ndot"><svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 0 24 24" width="18px"><path d="M0 0h24v24H0V0z" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z" fill="currentColor"></path></svg></div></div></div></div></div><div class="css-ju12u0"><div label="Header" class="css-is8b0c"><div class="remark-highlight"><pre class="language-shell"><code class="language-shell"><span class="token function">curl</span> <span class="token string">"https://accounts.livechat.com/v2/token"</span> -H <span class="token string">"Authorization: Bearer <access_token|refresh token>"</span> -X DELETE </code></pre></div></div></div></div><div class="css-1vuwrgc"><div class="css-iwgofq"><span class="css-w6gvpm">response (200 OK)</span> <div class="css-1wp1vo7"><div class="css-xnt8k0"><div class="css-6oazep"><div class="css-11ycufd">Copied!</div></div><div class="css-139ndot"><svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 0 24 24" width="18px"><path d="M0 0h24v24H0V0z" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z" fill="currentColor"></path></svg></div></div></div></div><div class="css-ju12u0"><div class="remark-highlight"><pre class="language-json"><code class="language-json"><span class="token punctuation">{</span><span class="token punctuation">}</span> </code></pre></div></div></div></div></section><section class="css-v24v0q"><div class="css-11ycufd"><h3 class="heading"><a id="validating-the-access-token" href="#validating-the-access-token" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#validating-the-access-token"><span class="icon icon-link"></span></a>Validating the access token</a></h3><p>You can validate an <code>access_token</code> by making a GET HTTP request to the following URL:</p><div class="remark-highlight"><pre class="language-url"><code class="language-url"><span class="token scheme">https<span class="token scheme-delimiter">:</span></span><span class="token authority"><span class="token authority-delimiter">//</span><span class="token host">accounts.livechat.com</span></span><span class="token path"><span class="token path-separator">/</span>v2<span class="token path-separator">/</span>info</span> </code></pre></div><p>Please note that refresh tokens are not supported for direct validation. If an access token was obtained using a refresh token, the response will return both tokens.</p><h5 class="heading"><a id="response-3" href="#response-3" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#response-3"><span class="icon icon-link"></span></a>Response</a></h5><p>The response is a JSON with the following parameters:</p><div class="css-q76ucn"><table><thead><tr><th>Parameter</th><th>Description</th></tr></thead><tbody><tr><td><code>access_token</code></td><td>A token you can use to call LiveChat APIs on behalf of the user.</td></tr><tr><td><code>account_id</code></td><td>The ID of the Agent's account</td></tr><tr><td><code>client_id</code></td><td><strong>Client Id</strong> of your app</td></tr><tr><td><code>expires_in</code></td><td>A number in seconds specifying how long the <code>access_token</code> will be valid. When it expires, you will need to generate a new <code>access_token</code> using <code>refresh_token</code> (read <a href="/docs/authorization/agent-authorization#using-the-refresh-token">Using the refresh token</a> for more details).</td></tr><tr><td><code>organization_id</code></td><td>The ID of the organization's account.</td></tr><tr><td><code>scope</code></td><td>A comma-separated list of permissions an <code>access_token</code> has.</td></tr><tr><td><code>refresh_token</code></td><td>A token that can be used to generate new access tokens. Returned optionally.</td></tr><tr><td><code>token_type</code></td><td>Value: <code>Bearer</code></td></tr></tbody></table></div><p>💡 <strong>Got stuck? See common</strong> <a href="/docs/authorization/authorizing-api-calls#errors"><strong>Errors</strong></a>.</p></div><div class="css-17buymi"><div class="css-16prjg8"><div class="css-13hnul0"><code class="code-sample-header">VALIDATE AN ACCESS TOKEN</code><div class="css-1sg2lsz"><div class="css-1wp1vo7"><div class="css-xnt8k0"><div class="css-6oazep"><div class="css-11ycufd">Copied!</div></div><div class="css-139ndot"><svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 0 24 24" width="18px"><path d="M0 0h24v24H0V0z" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z" fill="currentColor"></path></svg></div></div></div></div></div><div class="css-ju12u0"><div class="remark-highlight"><pre class="language-shell"><code class="language-shell"><span class="token function">curl</span> <span class="token string">"https://accounts.livechat.com/v2/info"</span> -H <span class="token string">"Authorization: Bearer <access_token>"</span> </code></pre></div></div></div><div class="css-1vuwrgc"><div class="css-iwgofq"><span class="css-w6gvpm">response</span> <div class="css-1wp1vo7"><div class="css-xnt8k0"><div class="css-6oazep"><div class="css-11ycufd">Copied!</div></div><div class="css-139ndot"><svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 0 24 24" width="18px"><path d="M0 0h24v24H0V0z" fill="none"></path><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z" fill="currentColor"></path></svg></div></div></div></div><div class="css-ju12u0"><div class="remark-highlight"><pre class="language-json"><code class="language-json"><span class="token punctuation">{</span> <span class="token property">"access_token"</span><span class="token operator">:</span> <span class="token string">"dal:test_YTJQ6GDVgQf8kQDPw"</span><span class="token punctuation">,</span> <span class="token property">"account_id"</span><span class="token operator">:</span> <span class="token string">"bbe8b147-d60e-46ac-a1e5-1e94b11ea6e1"</span><span class="token punctuation">,</span> <span class="token property">"client_id"</span><span class="token operator">:</span> <span class="token string">"9cbf3a968289727cb3cdfe83ab1d9836"</span><span class="token punctuation">,</span> <span class="token property">"expires_in"</span><span class="token operator">:</span> <span class="token number">28725</span><span class="token punctuation">,</span> <span class="token property">"organization_id"</span><span class="token operator">:</span> <span class="token string">"390e44e6-f1e6-0368c-z6ddb-74g14508c2ex"</span><span class="token punctuation">,</span> <span class="token property">"scope"</span><span class="token operator">:</span> <span class="token string">"chats--all:ro,chats--all:rw"</span><span class="token punctuation">,</span> <span class="token property">"token_type"</span><span class="token operator">:</span> <span class="token string">"Bearer"</span> <span class="token punctuation">}</span> </code></pre></div></div></div></div></section><h2 class="heading css-1679d3t"><a id="errors" href="#errors" class="reference css-180507a"><a href="/docs/authorization/agent-authorization#errors"><span class="icon icon-link"></span></a>Errors</a></h2><p>If you get stuck or any error appears, please go to common <a href="/docs/authorization/authorizing-api-calls#errors">Errors</a>.</p><style data-emotion-css="1fsewzh">.css-1fsewzh{margin-top:50px;}.css-1fsewzh > label{margin:0 0 5px 0;}.css-1fsewzh label + div{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}</style></article></div><p>...</p></div><style data-emotion-css="1mpu5jj">.css-1mpu5jj{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:space-evenly;-webkit-justify-content:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly;-webkit-align-items:start;-webkit-box-align:start;-ms-flex-align:start;align-items:start;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;background-color:#f6f6f7;color:#424d57;min-height:248px;margin-bottom:45px;}@media (min-width:768px){.css-1mpu5jj{margin-bottom:0px;}}</style><div class="css-1mpu5jj"><style data-emotion-css="dtzkur">.css-dtzkur{width:100%;padding:20px;}@media (min-width:768px){.css-dtzkur{margin-top:75px;padding:0;width:160px;}}</style><div class="css-dtzkur"><style data-emotion-css="r8rj3w">.css-r8rj3w{font-weight:600;font-size:16px;line-height:24px;color:#424d57;}</style><div class="css-r8rj3w">Join the community</div><style data-emotion-css="1ws0nkq">.css-1ws0nkq{font-weight:400;font-size:12px;line-height:20px;color:#424d57;}</style><div class="css-1ws0nkq">Get in direct contact with us through Discord.</div><style data-emotion-css="652pjx">.css-652pjx:hover{-webkit-text-decoration:none;text-decoration:none;}</style><a href="https://discord.gg/MGFyhbdFxt" target="_blank" rel="noopener noreferrer" class="css-652pjx"><style data-emotion-css="y77wuh">.css-y77wuh{margin-top:5px;}</style><button class="lc-btn lc-btn--secondary lc-btn--compact css-y77wuh" type="button"><i class="lc-btn__icon lc-btn__icon-left"><svg width="20" height="16" viewBox="0 0 20 16" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_613_10386)"><path d="M16.9308 1.63294C15.6561 1.04804 14.2892 0.617109 12.8599 0.370298C12.8339 0.365535 12.8079 0.377439 12.7945 0.401247C12.6187 0.713926 12.4239 1.12184 12.2876 1.44246C10.7503 1.21232 9.22099 1.21232 7.71527 1.44246C7.57887 1.11471 7.37707 0.713926 7.20048 0.401247C7.18707 0.378233 7.16107 0.366329 7.13504 0.370298C5.70659 0.616321 4.33963 1.04725 3.06411 1.63294C3.05307 1.6377 3.04361 1.64564 3.03732 1.65595C0.444493 5.52959 -0.265792 9.30801 0.0826501 13.0396C0.0842267 13.0578 0.0944749 13.0753 0.108665 13.0864C1.81934 14.3427 3.47642 15.1054 5.10273 15.6109C5.12876 15.6188 5.15634 15.6093 5.1729 15.5879C5.55761 15.0625 5.90054 14.5086 6.19456 13.926C6.21192 13.8919 6.19535 13.8514 6.15989 13.838C5.61594 13.6316 5.098 13.38 4.59977 13.0943C4.56037 13.0713 4.55721 13.015 4.59347 12.988C4.69831 12.9094 4.80318 12.8277 4.9033 12.7451C4.92141 12.7301 4.94665 12.7269 4.96794 12.7364C8.24107 14.2308 11.7846 14.2308 15.0191 12.7364C15.0404 12.7261 15.0657 12.7293 15.0846 12.7443C15.1847 12.8269 15.2895 12.9094 15.3952 12.988C15.4314 13.015 15.4291 13.0713 15.3897 13.0943C14.8914 13.3856 14.3735 13.6316 13.8288 13.8372C13.7933 13.8507 13.7775 13.8919 13.7949 13.926C14.0952 14.5078 14.4381 15.0617 14.8157 15.5871C14.8315 15.6093 14.8599 15.6188 14.8859 15.6109C16.5201 15.1054 18.1772 14.3427 19.8879 13.0864C19.9028 13.0753 19.9123 13.0586 19.9139 13.0404C20.3309 8.72626 19.2154 4.97883 16.9568 1.65674C16.9513 1.64564 16.9419 1.6377 16.9308 1.63294ZM6.68335 10.7674C5.69792 10.7674 4.88594 9.86274 4.88594 8.75167C4.88594 7.6406 5.68217 6.7359 6.68335 6.7359C7.69239 6.7359 8.49651 7.64855 8.48073 8.75167C8.48073 9.86274 7.68451 10.7674 6.68335 10.7674ZM13.329 10.7674C12.3435 10.7674 11.5316 9.86274 11.5316 8.75167C11.5316 7.6406 12.3278 6.7359 13.329 6.7359C14.338 6.7359 15.1421 7.64855 15.1264 8.75167C15.1264 9.86274 14.338 10.7674 13.329 10.7674Z" fill="#424D57"></path></g><defs><clipPath id="clip0_613_10386"><rect width="20" height="15.493" fill="white" transform="translate(0 0.25354)"></rect></clipPath></defs></svg></i><div>Discord</div></button></a></div><div class="css-dtzkur"><div class="css-r8rj3w">Follow us</div><div class="css-1ws0nkq">Follow our insightful tweets and interact with our content.</div><a href="https://twitter.com/TextPlatform" target="_blank" rel="noopener noreferrer" class="css-652pjx"><button class="lc-btn lc-btn--secondary lc-btn--compact css-y77wuh" type="button"><i class="lc-btn__icon lc-btn__icon-left"><svg width="24" height="24" class="rmi rmi-twitter undefined" viewBox="0 0 24 24"><path d="M22.46 6c-.77.35-1.6.58-2.46.69.88-.53 1.56-1.37 1.88-2.38-.83.5-1.75.85-2.72 1.05C18.37 4.5 17.26 4 16 4c-2.35 0-4.27 1.92-4.27 4.29 0 .34.04.67.11.98C8.28 9.09 5.11 7.38 3 4.79c-.37.63-.58 1.37-.58 2.15 0 1.49.75 2.81 1.91 3.56-.71 0-1.37-.2-1.95-.5v.03c0 2.08 1.48 3.82 3.44 4.21a4.22 4.22 0 0 1-1.93.07 4.28 4.28 0 0 0 4 2.98 8.521 8.521 0 0 1-5.33 1.84c-.34 0-.68-.02-1.02-.06C3.44 20.29 5.7 21 8.12 21 16 21 20.33 14.46 20.33 8.79c0-.19 0-.37-.01-.56.84-.6 1.56-1.36 2.14-2.23z"></path></svg></i><div>Twitter</div></button></a></div><div class="css-dtzkur"><div class="css-r8rj3w">Contribute</div><div class="css-1ws0nkq">See something that's wrong or unclear? Submit a pull request.</div><a href="https://github.com/livechat/livechat-public-docs" target="_blank" rel="noopener noreferrer" class="css-652pjx"><button class="lc-btn lc-btn--secondary lc-btn--compact css-y77wuh" type="button"><i class="lc-btn__icon lc-btn__icon-left"><svg width="24" height="24" class="rmi rmi-github undefined" viewBox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2z"></path></svg></i><div>GitHub</div></button></a></div><div class="css-dtzkur"><div class="css-r8rj3w">Contact us</div><div class="css-1ws0nkq">Want to share feedback? Reach us at:<!-- --> <a href="mailto:developers@text.com">developers@text.com</a></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/authorization/agent-authorization","query":{},"buildId":"mT926s0W5VyhfFaApGsyO","assetPrefix":"/docs","runtimeConfig":{},"nextExport":true,"autoExport":true,"isFallback":false}</script><script nomodule="" src="/docs/_next/static/chunks/polyfills-c2dc1d9251306528e50c.js"></script><script src="/docs/_next/static/chunks/webpack-af19fbe32e13fc779465.js" async=""></script><script src="/docs/_next/static/chunks/framework.57a22ac5870571c2eff5.js" async=""></script><script src="/docs/_next/static/chunks/commons.0889bf71124535c6c4cd.js" async=""></script><script src="/docs/_next/static/chunks/main-7bb61c4f8d40f1e634e9.js" async=""></script><script src="/docs/_next/static/chunks/pages/_app-cdbe91fdfdbd305577ef.js" async=""></script><script src="/docs/_next/static/chunks/f66b9295.f9eceaafe4216b86326e.js" async=""></script><script src="/docs/_next/static/chunks/b31dc3a52fd33fe1943f491eae223576a0413e10.ac30430b2138b8fefed8.js" async=""></script><script src="/docs/_next/static/chunks/067aff065064306958fa97cea949633bebf95d70.dede6f8249fbb82aff52.js" async=""></script><script src="/docs/_next/static/chunks/pages/authorization/agent-authorization-f8be7c47ea87c0ff6041.js" async=""></script><script src="/docs/_next/static/mT926s0W5VyhfFaApGsyO/_buildManifest.js" async=""></script><script src="/docs/_next/static/mT926s0W5VyhfFaApGsyO/_ssgManifest.js" async=""></script></body></html>