Files
web-hosts/chuckie.coppertone.tech/app/docs/canva/docs_connect_authentication.html
2025-12-26 13:38:04 +01:00

126 lines
92 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" data-next-head=""/><link rel="shortcut icon" type="image/x-icon" href="/favicon.ico"/><link rel="apple-touch-icon" href="/_next/static/media/apple-touch-120x120.e46561c0.webp"/><link rel="apple-touch-icon" href="/_next/static/media/apple-touch-152x152.0542b3ce.webp" sizes="152x152"/><link rel="apple-touch-icon" href="/_next/static/media/apple-touch-167x167.5c4ab5c5.webp" sizes="167x167"/><link rel="apple-touch-icon" href="/_next/static/media/apple-touch-180x180.b6aae4a9.webp" sizes="180x180"/><link rel="preload" href="/fonts/canva-sans-latin.woff2" as="font" type="font/woff2" crossorigin=""/><link rel="preload" href="/fonts/canva-sans-latin.woff" as="font" type="font/woff" crossorigin=""/><link rel="preload" href="/fonts/canva-sans-latin-ext.woff2" as="font" type="font/woff2" crossorigin=""/><link rel="preload" href="/fonts/canva-sans-latin-ext.woff" as="font" type="font/woff" crossorigin=""/><link rel="preload" href="/fonts/canva-sans-scientific.woff2" as="font" type="font/woff2" crossorigin=""/><link rel="preload" href="/fonts/canva-sans-scientific.woff" as="font" type="font/woff" crossorigin=""/><title data-next-head="">Authentication - Canva Connect APIs Documentation</title><meta name="robots" content="index,follow" data-next-head=""/><meta property="og:title" content="Authentication - Canva Connect APIs Documentation" data-next-head=""/><meta property="og:type" content="article" data-next-head=""/><meta property="og:image" content="https://www.canva.dev/_next/static/media/canva-developers-banner.e4c301bf.png" data-next-head=""/><meta property="og:locale" content="en_US" data-next-head=""/><meta property="og:site_name" content="canva.dev" data-next-head=""/><link rel="preload" href="/_next/static/css/8a8823919c23b26d.css" as="style"/><link rel="preload" href="/_next/static/css/e2c01d6a5c49864a.css" as="style"/><link rel="preload" href="/_next/static/css/c755d63bd0373b3b.css" as="style"/><link rel="preload" href="/_next/static/css/b2340fde42b1226e.css" as="style"/><script id="theme-init" data-nscript="beforeInteractive" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw">try{var e=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light",t=localStorage.getItem("theme")||"system",a="system"===t?e:t;document.documentElement.classList.add(a)}catch{}</script><link rel="stylesheet" href="/_next/static/css/8a8823919c23b26d.css" data-n-g=""/><link rel="stylesheet" href="/_next/static/css/e2c01d6a5c49864a.css" data-n-p=""/><link rel="stylesheet" href="/_next/static/css/c755d63bd0373b3b.css" data-n-p=""/><link rel="stylesheet" href="/_next/static/css/b2340fde42b1226e.css"/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script defer="" src="/_next/static/chunks/77501.97847b4d40605f30.js" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script defer="" src="/_next/static/chunks/297.4c3c9e1febf355c3.js" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script src="/_next/static/chunks/webpack-04ce3821ecaad8ec.js" defer="" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script src="/_next/static/chunks/framework-20a234aadca2790f.js" defer="" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script src="/_next/static/chunks/main-ea7b094a92edfc23.js" defer="" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script src="/_next/static/chunks/pages/_app-2c10d3d86ddb98b5.js" defer="" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script src="/_next/static/chunks/42369-71f885ba53a07132.js" defer="" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script src="/_next/static/chunks/13621-46af566679324dbd.js" defer="" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script src="/_next/static/chunks/62867-653223f8cb38485d.js" defer="" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script src="/_next/static/chunks/59309-9aa823a3b8b3db91.js" defer="" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script src="/_next/static/chunks/45201-be1075753902cf9d.js" defer="" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script src="/_next/static/chunks/46570-01fbb3752680cb62.js" defer="" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script src="/_next/static/chunks/34604-2da6857a6b4a0f9d.js" defer="" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script src="/_next/static/chunks/42589-796fb267f23b700d.js" defer="" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script src="/_next/static/chunks/31448-28c2c2f35018fb5c.js" defer="" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script src="/_next/static/chunks/63203-2aef1370530e7556.js" defer="" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script src="/_next/static/chunks/81978-9d9ca331ccef576d.js" defer="" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script src="/_next/static/chunks/62425-9ddca2c2dd6bb869.js" defer="" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script src="/_next/static/chunks/pages/docs/connect/authentication-f3605ca55ebc8c4b.js" defer="" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script src="/_next/static/423743adabfc0c1882dab30d071fb828da56a44a/_buildManifest.js" defer="" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script><script src="/_next/static/423743adabfc0c1882dab30d071fb828da56a44a/_ssgManifest.js" defer="" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw"></script></head><body><div id="__next"><div class="yIDCqA"><div class="roJtnQ" style="--main-top:72px;--sidebar-max-height:100vh"><div class="FmtbLQ ObBgBw"><p class="aWBg0w V5s4kA aZskFA u16U_g"><a class="Ej7lEg WkdUeQ _3bC2IQ" href="#_R_d6_" draggable="false"><span class="N00Reg">Skip navigation</span></a></p></div><div class="FmtbLQ ObBgBw"><p class="aWBg0w V5s4kA aZskFA u16U_g"><a class="Ej7lEg WkdUeQ _3bC2IQ" href="#_R_d6H1_" draggable="false"><span class="N00Reg">Skip to main content</span></a></p></div><header class="G_xUCA"><div class="g2RwFQ"><div class="_4gvS3Q"><div class="mYT7OA"><button class="_5KtATA LQzFZw VgvqkQ _8ERLTg h69Neg unS_Qw LQzFZw VgvqkQ _4_iekA j34Zww aqbYPg _3FvZZg h5mTDw" type="button" aria-label="Main menu"><span class="vxQy1w"><span aria-hidden="true" class="NA_Img dkWypw"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" d="M4 6a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75A.75.75 0 0 1 4 6Zm0 6a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75A.75.75 0 0 1 4 12Zm.75 5.25a.75.75 0 0 0 0 1.5h14.5a.75.75 0 0 0 0-1.5H4.75Z"/></svg></span></span></button></div><div class="coDP_Q"><a href="https://www.canva.com/developers/"><div aria-label="Canva Developers logo"><svg xmlns="http://www.w3.org/2000/svg" width="160" height="22" fill="none" viewBox="0 0 160 22"><svg width="56" viewBox="0 0 80 30"><defs><radialGradient id="_3370364224__a" cx="0" cy="0" r="1" gradientTransform="matrix(16.80002 -17.28 11.48403 11.16504 40.96 29)" gradientUnits="userSpaceOnUse"><stop stop-color="#6420FF"></stop><stop offset="1" stop-color="#6420FF" stop-opacity="0"></stop></radialGradient><radialGradient id="_3370364224__b" cx="0" cy="0" r="1" gradientTransform="matrix(46.71996 4.16 -3.31561 37.23688 1.92 17.64)" gradientUnits="userSpaceOnUse"><stop offset="0.25" stop-color="#00C4CC"></stop><stop offset="1" stop-color="#00C4CC" stop-opacity="0"></stop></radialGradient><radialGradient id="_3370364224__c" cx="0" cy="0" r="1" gradientTransform="rotate(-38.85 54.22 -35.3)scale(30.226 20.6676)" gradientUnits="userSpaceOnUse"><stop stop-color="#6420FF"></stop><stop offset="1" stop-color="#6420FF" stop-opacity="0"></stop></radialGradient><radialGradient id="_3370364224__d" cx="0" cy="0" r="1" gradientTransform="matrix(31.32001 -15.36 10.50269 21.41566 2.28 26.2)" gradientUnits="userSpaceOnUse"><stop stop-color="#6420FF"></stop><stop offset="1" stop-color="#6420FF" stop-opacity="0"></stop></radialGradient><radialGradient id="_3370364224__e" cx="0" cy="0" r="1" gradientTransform="matrix(67.99982 15.03996 -18.44596 83.39925 7.68 2.92)" gradientUnits="userSpaceOnUse"><stop stop-color="#00C4CC"></stop><stop offset="1" stop-color="#00C4CC" stop-opacity="0"></stop></radialGradient><pattern id="_3370364224__f" width="1" height="1"><path fill="#7D2AE7" d="M0 0h100v100H0z"></path><path fill="url(#_3370364224__a)" d="M0 0h100v100H0z"></path><path fill="url(#_3370364224__b)" d="M0 0h100v100H0z"></path><path fill="url(#_3370364224__c)" d="M0 0h100v100H0z"></path><path fill="url(#_3370364224__d)" d="M0 0h100v100H0z"></path><path fill="url(#_3370364224__e)" d="M0 0h100v100H0z"></path></pattern></defs><path fill="url(#_3370364224__f)" d="M79.444 18.096c-.136 0-.26.088-.324.272-.82 2.34-1.928 3.732-2.84 3.732-.524 0-.736-.584-.736-1.5 0-2.292 1.372-7.152 2.064-9.368.08-.268.132-.508.132-.712 0-.644-.352-.96-1.224-.96-.94 0-1.952.368-2.936 2.092-.34-1.52-1.368-2.184-2.804-2.184-1.66 0-3.264 1.068-4.584 2.8s-2.872 2.3-4.04 2.02c.84-2.056 1.152-3.592 1.152-4.732 0-1.788-.884-2.868-2.312-2.868-2.172 0-3.424 2.072-3.424 4.252 0 1.684.764 3.416 2.444 4.256-1.408 3.184-3.464 6.064-4.244 6.064-1.008 0-1.304-4.932-1.248-8.46.036-2.024.204-2.128.204-2.74 0-.352-.228-.592-1.144-.592-2.136 0-2.796 1.808-2.896 3.884a10.2 10.2 0 0 1-.368 2.332c-.892 3.184-2.732 5.6-3.932 5.6-.556 0-.708-.556-.708-1.284 0-2.292 1.284-5.156 1.284-7.6 0-1.796-.788-2.932-2.272-2.932-1.748 0-4.06 2.08-6.248 5.976.72-2.984 1.016-5.872-1.116-5.872A2.9 2.9 0 0 0 36 9.916a.75.75 0 0 0-.432.728c.204 3.176-2.56 11.312-5.18 11.312-.476 0-.708-.516-.708-1.348 0-2.296 1.368-7.144 2.056-9.364.088-.288.136-.536.136-.752 0-.608-.376-.92-1.228-.92-.936 0-1.952.356-2.932 2.08-.344-1.52-1.372-2.184-2.808-2.184-2.356 0-4.988 2.492-6.144 5.74-1.548 4.336-4.668 8.524-8.868 8.524-3.812 0-5.824-3.172-5.824-8.184C4.068 8.312 9.38 2.4 13.32 2.4c1.884 0 2.784 1.2 2.784 3.04 0 2.228-1.244 3.264-1.244 4.112 0 .26.216.516.644.516 1.712 0 3.728-2.012 3.728-4.756S17.004.56 13.064.56C6.552.56 0 7.112 0 15.508c0 6.68 3.296 10.708 8.996 10.708 3.888 0 7.284-3.024 9.116-6.552.208 2.924 1.536 4.452 3.56 4.452 1.8 0 3.256-1.072 4.368-2.956.428 1.972 1.564 2.936 3.04 2.936 1.692 0 3.108-1.072 4.456-3.064-.02 1.564.336 3.036 1.692 3.036.64 0 1.404-.148 1.54-.708 1.428-5.904 4.956-10.724 6.036-10.724.32 0 .408.308.408.672 0 1.604-1.132 4.892-1.132 6.992 0 2.268.964 3.768 2.956 3.768 2.208 0 4.452-2.704 5.948-6.656.468 3.692 1.48 6.672 3.064 6.672 1.944 0 5.396-4.092 7.488-8.424.82.104 2.052.076 3.236-.76-.504 1.276-.8 2.672-.8 4.068 0 4.02 1.92 5.148 3.572 5.148 1.796 0 3.252-1.072 4.368-2.956.368 1.7 1.308 2.932 3.036 2.932 2.704 0 5.052-2.764 5.052-5.032 0-.6-.256-.964-.556-.964M23.32 21.888c-1.092 0-1.52-1.1-1.52-2.74 0-2.848 1.948-7.604 4.008-7.604.9 0 1.24 1.06 1.24 2.356 0 2.892-1.852 7.988-3.728 7.988m37.404-8.5c-.652-.776-.888-1.832-.888-2.772 0-1.16.424-2.14.932-2.14s.664.5.664 1.196c0 1.164-.416 2.864-.708 3.716m8.468 8.5c-1.092 0-1.52-1.264-1.52-2.74 0-2.748 1.948-7.604 4.024-7.604.9 0 1.22 1.052 1.22 2.356 0 2.892-1.82 7.988-3.724 7.988"></path></svg><path fill="#0E1318" d="M68.33 4.07h-4.48v13.18h4.48c4.1 0 6.51-2.13 6.51-6.6 0-4.45-2.4-6.58-6.51-6.58M65.92 15.5V5.82h2.26c2.94 0 4.5 1.3 4.5 4.84s-1.56 4.84-4.5 4.84zm19.52-2.88c.03-.29.05-.76.05-1.17-.02-2.88-1.56-4.33-4.21-4.33-2.6 0-4.67 1.65-4.67 5.16 0 3.44 1.86 5.15 4.82 5.15 2.26 0 3.42-1.03 3.97-2.33l-1.3-.8h-.19c-.45.95-1.18 1.42-2.48 1.42-1.59 0-2.64-.85-2.77-2.97l6.59-.02zm-6.74-1.3c.22-1.87 1.16-2.62 2.58-2.62 1.43 0 2.24.75 2.3 2.62zm13.76 5.93 3.7-9.94h-2.05l-2.78 7.68h-.2L88.31 7.3h-2.1l3.73 9.94h2.5Zm13.46-4.63c.04-.29.06-.76.06-1.17-.02-2.88-1.57-4.33-4.22-4.33-2.6 0-4.67 1.65-4.67 5.16 0 3.44 1.86 5.15 4.82 5.15 2.26 0 3.43-1.03 3.97-2.33l-1.3-.8h-.19c-.45.95-1.18 1.42-2.48 1.42-1.58 0-2.64-.85-2.77-2.97l6.6-.02zm-6.74-1.3c.23-1.87 1.17-2.62 2.58-2.62 1.43 0 2.24.75 2.3 2.62zm11.24 6.11c.49 0 .96-.07 1.2-.22l-.2-1.54-.14-.04c-.15.05-.34.1-.52.1-.57 0-.87-.31-.87-1.04V3.32h-2v11.46c0 1.83.97 2.65 2.53 2.65m6.78 0c2.87 0 4.75-1.8 4.75-5.15s-1.88-5.16-4.74-5.16-4.75 1.8-4.75 5.16c0 3.35 1.89 5.15 4.75 5.15Zm0-1.7c-1.69 0-2.69-1.03-2.69-3.45 0-2.43 1-3.45 2.7-3.45s2.69 1.02 2.69 3.45-1 3.44-2.7 3.44Zm8.9 5.55v-5.2l.18-.04c.72 1 1.71 1.4 2.96 1.4 2.42 0 4.2-1.66 4.2-5.16s-1.68-5.16-4.07-5.16c-1.32 0-2.4.5-3.09 1.62l-.19-.04V7.3h-1.98v13.98h1.98Zm2.63-5.56c-1.53 0-2.64-1.03-2.64-3.44s1.11-3.45 2.64-3.45c1.65 0 2.63 1 2.63 3.45 0 2.44-.98 3.44-2.63 3.44m15.08-3.1c.04-.29.06-.76.06-1.17-.02-2.88-1.56-4.33-4.22-4.33-2.6 0-4.66 1.65-4.66 5.16 0 3.44 1.86 5.15 4.81 5.15 2.26 0 3.43-1.03 3.98-2.33l-1.3-.8h-.19c-.45.95-1.19 1.42-2.48 1.42-1.59 0-2.64-.85-2.77-2.97l6.59-.02.19-.11Zm-6.73-1.3c.22-1.87 1.16-2.62 2.57-2.62 1.44 0 2.25.75 2.3 2.62zm10.74 5.93v-4.77c0-2.52.89-3.44 2.32-3.44.49 0 .81.1 1.11.24l.19-.03.41-1.7a2.44 2.44 0 0 0-1.4-.34 2.5 2.5 0 0 0-2.51 1.66l-.2-.04V7.31h-1.9v9.94zm8.36.18c2.48 0 3.82-1.26 3.82-3.06 0-1.5-.77-2.45-2.7-2.88l-1.42-.34c-1.11-.25-1.45-.66-1.45-1.28 0-.74.58-1.15 1.75-1.15.92 0 1.62.26 2.22.96h.19l1.09-1.13c-.56-.8-1.56-1.43-3.5-1.43-2.22 0-3.64 1.07-3.64 2.84 0 1.4.78 2.37 2.72 2.84l1.48.36c.94.23 1.3.66 1.3 1.3 0 .81-.64 1.34-1.84 1.3-1.23-.04-2.07-.45-2.73-1.41h-.2l-1.12 1.2c.5 1.08 2.03 1.88 4.03 1.88"></path></svg></div></a></div><ul class="_9n2CjA"><li class="UJ3ndA"><div class="aWBg0w aZskFA u16U_g"><a class="A2itOw" href="/">Home</a></div></li><li class="UJ3ndA"><div><button id="_R_2qrd6_" class="_5KtATA LQzFZw VgvqkQ _8ERLTg uIDahA unS_Qw LQzFZw VgvqkQ _4_iekA j34Zww aqbYPg _3FvZZg rom01w _5HDVRQ skRKKw" type="button" aria-expanded="false" aria-haspopup="menu" role="button"><span class="khPe7Q">Documentation</span><span class="vxQy1w"><span aria-hidden="true" class="NA_Img dkWypw"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill="currentColor" d="m16.384 9.225-4.207 4.207a.25.25 0 0 1-.353 0L7.623 9.224a.75.75 0 0 0-1.059.002.75.75 0 0 0-.002 1.059l4.201 4.21c.681.68 1.787.678 2.47-.005l4.207-4.207a.75.75 0 0 0 .002-1.059.75.75 0 0 0-1.058.002"/></svg></span></span></button></div></li><li class="UJ3ndA"><div><button id="_R_3qrd6_" class="_5KtATA LQzFZw VgvqkQ _8ERLTg uIDahA unS_Qw LQzFZw VgvqkQ _4_iekA j34Zww aqbYPg _3FvZZg rom01w _5HDVRQ" type="button" aria-expanded="false" aria-haspopup="menu" role="button"><span class="khPe7Q">Blogs</span><span class="vxQy1w"><span aria-hidden="true" class="NA_Img dkWypw"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill="currentColor" d="m16.384 9.225-4.207 4.207a.25.25 0 0 1-.353 0L7.623 9.224a.75.75 0 0 0-1.059.002.75.75 0 0 0-.002 1.059l4.201 4.21c.681.68 1.787.678 2.47-.005l4.207-4.207a.75.75 0 0 0 .002-1.059.75.75 0 0 0-1.058.002"/></svg></span></span></button></div></li><li class="UJ3ndA"><div class="aWBg0w aZskFA u16U_g"><a class="A2itOw" href="https://www.canva.com/developers/apps">Your apps</a></div></li><li class="UJ3ndA"><div class="aWBg0w aZskFA u16U_g"><a class="A2itOw" href="https://www.canva.com/developers/integrations">Your integrations</a></div></li></ul></div><div class="eEmpxw"><div class="EHVFHA BMOCzQ _6Mu4Ow YgHDng LuBWVA" style="--s_rwAw:flex"></div><div class="rPjc_w"></div></div></div></header><div class="qHQeDg"></div><div class="mBD4bw"></div><main class="Ow0ZeA" id="_R_d6_"><div class="aWBg0w aZskFA u16U_g"><div class="_5tsyWA"><div class="UarXQA"><div class="lE45tg"><div class="voDSaw" style="transform:none"><div class="_4YUW0Q TKlzHA"><div><span class="aWBg0w aZskFA u16U_g V0brdg">Getting started</span><div><a class="H8chQA zXzCWQ" href="/docs/connect/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">Overview</span></a><a class="H8chQA zXzCWQ" href="/docs/connect/quickstart/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">Quickstart</span></a><a class="H8chQA zXzCWQ" href="/docs/connect/creating-integrations/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">Creating integrations</span></a><a class="H8chQA zXzCWQ" href="/docs/connect/mcp-server/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">Dev MCP server</span></a></div></div><div><span class="aWBg0w aZskFA u16U_g V0brdg">Fundamentals</span><div><a class="H8chQA zXzCWQ" href="/docs/connect/api-requests-responses/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">API requests &amp; responses</span></a><a class="H8chQA zXzCWQ jukMSg" href="/docs/connect/authentication/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">Authentication</span></a><a class="H8chQA zXzCWQ" href="/docs/connect/versions/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">API versions</span></a><a class="H8chQA zXzCWQ" href="/docs/connect/canva-concepts/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">Canva concepts</span></a><a class="H8chQA zXzCWQ" href="/docs/connect/guidelines/security/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">Security</span></a><a class="H8chQA zXzCWQ" href="/docs/connect/guidelines/shared-responsibility/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">Shared responsibility model</span></a></div></div><div><span class="aWBg0w aZskFA u16U_g V0brdg">Examples</span><div><a class="H8chQA zXzCWQ" href="/docs/connect/autofill-guide/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">Autofill guide</span></a><a class="H8chQA zXzCWQ" href="/docs/connect/return-navigation-guide/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">Return navigation guide</span></a></div></div><div><span class="aWBg0w aZskFA u16U_g V0brdg">Guidelines</span><div><a class="H8chQA zXzCWQ" href="/docs/connect/guidelines/brand/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">Brand</span></a><a class="H8chQA zXzCWQ" href="/docs/connect/guidelines/recommended-practices/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">Recommended practices</span></a><a class="H8chQA zXzCWQ" href="/docs/connect/guidelines/user-interface/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">User interface</span></a></div></div><div><span class="aWBg0w aZskFA u16U_g V0brdg">Distributing integrations</span><div><a class="H8chQA zXzCWQ" href="/docs/connect/submission-checklist/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">Submission checklist</span></a><a class="H8chQA zXzCWQ" href="/docs/connect/submitting-integrations/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">Submitting integrations</span></a></div></div><div><span class="aWBg0w aZskFA u16U_g V0brdg">API reference</span><div><div class="CZbFBQ zXzCWQ"><span class="Xt9mrg"><span class="aWBg0w aZskFA T5LNnw snQKTg _4QTBlg NJTMMA">Authentication</span></span><span><span aria-hidden="true" class="NA_Img dkWypw lmfTqA"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill="currentColor" d="m9.216 7.619 4.204 4.204a.25.25 0 0 1 0 .354l-4.204 4.204a.75.75 0 0 0 1.06 1.061l4.205-4.204a1.75 1.75 0 0 0 0-2.475l-4.204-4.205a.75.75 0 0 0-1.061 1.06"/></svg></span></span></div><div class="CZbFBQ zXzCWQ"><span class="Xt9mrg"><span class="aWBg0w aZskFA T5LNnw snQKTg _4QTBlg NJTMMA">Assets</span></span><span><span aria-hidden="true" class="NA_Img dkWypw lmfTqA"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill="currentColor" d="m9.216 7.619 4.204 4.204a.25.25 0 0 1 0 .354l-4.204 4.204a.75.75 0 0 0 1.06 1.061l4.205-4.204a1.75 1.75 0 0 0 0-2.475l-4.204-4.205a.75.75 0 0 0-1.061 1.06"/></svg></span></span></div><div class="CZbFBQ zXzCWQ"><span class="Xt9mrg"><span class="aWBg0w aZskFA T5LNnw snQKTg _4QTBlg NJTMMA">Autofill</span></span><span><span aria-hidden="true" class="NA_Img dkWypw lmfTqA"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill="currentColor" d="m9.216 7.619 4.204 4.204a.25.25 0 0 1 0 .354l-4.204 4.204a.75.75 0 0 0 1.06 1.061l4.205-4.204a1.75 1.75 0 0 0 0-2.475l-4.204-4.205a.75.75 0 0 0-1.061 1.06"/></svg></span></span></div><div class="CZbFBQ zXzCWQ"><span class="Xt9mrg"><span class="aWBg0w aZskFA T5LNnw snQKTg _4QTBlg NJTMMA">Brand templates</span></span><span><span aria-hidden="true" class="NA_Img dkWypw lmfTqA"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill="currentColor" d="m9.216 7.619 4.204 4.204a.25.25 0 0 1 0 .354l-4.204 4.204a.75.75 0 0 0 1.06 1.061l4.205-4.204a1.75 1.75 0 0 0 0-2.475l-4.204-4.205a.75.75 0 0 0-1.061 1.06"/></svg></span></span></div><div class="CZbFBQ zXzCWQ"><span class="Xt9mrg"><span class="aWBg0w aZskFA T5LNnw snQKTg _4QTBlg NJTMMA">Comments</span></span><span><span aria-hidden="true" class="NA_Img dkWypw lmfTqA"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill="currentColor" d="m9.216 7.619 4.204 4.204a.25.25 0 0 1 0 .354l-4.204 4.204a.75.75 0 0 0 1.06 1.061l4.205-4.204a1.75 1.75 0 0 0 0-2.475l-4.204-4.205a.75.75 0 0 0-1.061 1.06"/></svg></span></span></div><div class="CZbFBQ zXzCWQ"><span class="Xt9mrg"><span class="aWBg0w aZskFA T5LNnw snQKTg _4QTBlg NJTMMA">Designs</span></span><span><span aria-hidden="true" class="NA_Img dkWypw lmfTqA"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill="currentColor" d="m9.216 7.619 4.204 4.204a.25.25 0 0 1 0 .354l-4.204 4.204a.75.75 0 0 0 1.06 1.061l4.205-4.204a1.75 1.75 0 0 0 0-2.475l-4.204-4.205a.75.75 0 0 0-1.061 1.06"/></svg></span></span></div><div class="CZbFBQ zXzCWQ"><span class="Xt9mrg"><span class="aWBg0w aZskFA T5LNnw snQKTg _4QTBlg NJTMMA">Design imports</span></span><span><span aria-hidden="true" class="NA_Img dkWypw lmfTqA"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill="currentColor" d="m9.216 7.619 4.204 4.204a.25.25 0 0 1 0 .354l-4.204 4.204a.75.75 0 0 0 1.06 1.061l4.205-4.204a1.75 1.75 0 0 0 0-2.475l-4.204-4.205a.75.75 0 0 0-1.061 1.06"/></svg></span></span></div><div class="CZbFBQ zXzCWQ"><span class="Xt9mrg"><span class="aWBg0w aZskFA T5LNnw snQKTg _4QTBlg NJTMMA">Exports</span></span><span><span aria-hidden="true" class="NA_Img dkWypw lmfTqA"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill="currentColor" d="m9.216 7.619 4.204 4.204a.25.25 0 0 1 0 .354l-4.204 4.204a.75.75 0 0 0 1.06 1.061l4.205-4.204a1.75 1.75 0 0 0 0-2.475l-4.204-4.205a.75.75 0 0 0-1.061 1.06"/></svg></span></span></div><div class="CZbFBQ zXzCWQ"><span class="Xt9mrg"><span class="aWBg0w aZskFA T5LNnw snQKTg _4QTBlg NJTMMA">Folders</span></span><span><span aria-hidden="true" class="NA_Img dkWypw lmfTqA"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill="currentColor" d="m9.216 7.619 4.204 4.204a.25.25 0 0 1 0 .354l-4.204 4.204a.75.75 0 0 0 1.06 1.061l4.205-4.204a1.75 1.75 0 0 0 0-2.475l-4.204-4.205a.75.75 0 0 0-1.061 1.06"/></svg></span></span></div><div class="CZbFBQ zXzCWQ"><span class="Xt9mrg"><span class="aWBg0w aZskFA T5LNnw snQKTg _4QTBlg NJTMMA">Resizes</span></span><span><span aria-hidden="true" class="NA_Img dkWypw lmfTqA"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill="currentColor" d="m9.216 7.619 4.204 4.204a.25.25 0 0 1 0 .354l-4.204 4.204a.75.75 0 0 0 1.06 1.061l4.205-4.204a1.75 1.75 0 0 0 0-2.475l-4.204-4.205a.75.75 0 0 0-1.061 1.06"/></svg></span></span></div><div class="CZbFBQ zXzCWQ"><span class="Xt9mrg"><span class="aWBg0w aZskFA T5LNnw snQKTg _4QTBlg NJTMMA">Users</span></span><span><span aria-hidden="true" class="NA_Img dkWypw lmfTqA"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill="currentColor" d="m9.216 7.619 4.204 4.204a.25.25 0 0 1 0 .354l-4.204 4.204a.75.75 0 0 0 1.06 1.061l4.205-4.204a1.75 1.75 0 0 0 0-2.475l-4.204-4.205a.75.75 0 0 0-1.061 1.06"/></svg></span></span></div><a class="H8chQA zXzCWQ" href="/docs/connect/api-reference/webhooks/keys/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">Keys</span></a></div></div><div><span class="aWBg0w aZskFA u16U_g V0brdg">Webhooks</span><div><div class="CZbFBQ zXzCWQ"><span class="Xt9mrg"><span class="aWBg0w aZskFA T5LNnw snQKTg _4QTBlg NJTMMA">Webhook notifications</span></span><span><span aria-hidden="true" class="NA_Img dkWypw lmfTqA"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path fill="currentColor" d="m9.216 7.619 4.204 4.204a.25.25 0 0 1 0 .354l-4.204 4.204a.75.75 0 0 0 1.06 1.061l4.205-4.204a1.75 1.75 0 0 0 0-2.475l-4.204-4.205a.75.75 0 0 0-1.061 1.06"/></svg></span></span></div></div></div><div><span class="aWBg0w aZskFA u16U_g V0brdg">Appendix</span><div><a class="H8chQA zXzCWQ" href="/docs/connect/appendix/scopes/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">Scopes</span></a><a class="H8chQA zXzCWQ" href="/docs/connect/capabilities/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">Capabilities</span></a><a class="H8chQA zXzCWQ" href="/docs/connect/error-responses/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">Error responses</span></a><a class="H8chQA zXzCWQ" href="/docs/connect/changelog/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">Changelog</span></a><a class="H8chQA zXzCWQ" href="/docs/connect/zapier-mcp/"><span class="aWBg0w aZskFA T5LNnw snQKTg Zmljug NJTMMA">Zapier Canva MCP</span></a></div></div></div></div></div></div><div class="v5IPdw JpdlRQ" id="_R_d6H1_"><div class="qUc9Og"><div class="LmlcQg"><div class="uF_lpg"><div class="_64nODw"><div class="Ka9auQ bF3aMg" style="--PmK0MA:16px;--uQwNcw:24px"><div class="aDc6Yg"><div class="BMOCzQ LuBWVA"><div data-page-title="true"><h1 class="iXAxTg aZskFA u16U_g">Authentication</h1></div><div data-page-subtitle="true" class="VcL7uA"></div></div></div><div class="aDc6Yg oNSf9w"><div class="BMOCzQ EC2pjw LuBWVA" style="--KtVHvQ:0px;--PTJJWA:12px;--WtUbjw:12px;--U3-cIw:0px"><div class="UfYDHQ"><div class="YVd8lA"><div class="FJA3UA"><button class="_5KtATA LQzFZw VgvqkQ _8ERLTg MCgm0w Z3nT2A LQzFZw VgvqkQ _4_iekA xdqtjA aqbYPg _3FvZZg h9UfzQ" type="button" aria-describedby="_R_1knjjd6_"><span class="vxQy1w"><span aria-hidden="true" class="NA_Img dkWypw"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="M15 5.5V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v10c0 1.1.9 2 2 2h2.5v-1.5H5a.5.5 0 0 1-.5-.5V5c0-.28.22-.5.5-.5h8c.28 0 .5.22.5.5v.5H15zm-4 3a.5.5 0 0 0-.5.5v10c0 .28.22.5.5.5h8a.5.5 0 0 0 .5-.5V9a.5.5 0 0 0-.5-.5h-8zM11 7h8a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-8a2 2 0 0 1-2-2V9c0-1.1.9-2 2-2z"/></svg></span></span><span class="khPe7Q">Copy page</span></button></div></div><div class="YVd8lA"><div class="J_e6hA"><div><div id="_R_eknjjd6_"><button id="_R_2knjjd6_" class="_5KtATA LQzFZw VgvqkQ _8ERLTg h69Neg Z3nT2A LQzFZw VgvqkQ _4_iekA j34Zww aqbYPg _3FvZZg h5mTDw" type="button" aria-expanded="false" aria-haspopup="menu" role="button"><span class="vxQy1w"><span aria-hidden="true" class="NA_Img dkWypw"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M5 14a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm7 0a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm7 0a2 2 0 1 1 0-4 2 2 0 0 1 0 4z"/></svg></span></span></button></div><div id="_R_mknjjd6_" style="display:none"><div class="FJA3UA"><button id="_R_2knjjd6_" class="_5KtATA LQzFZw VgvqkQ _8ERLTg h69Neg Z3nT2A LQzFZw VgvqkQ _4_iekA j34Zww aqbYPg _3FvZZg h5mTDw" type="button" aria-expanded="false" aria-haspopup="menu" role="button"><span class="vxQy1w"><span aria-hidden="true" class="NA_Img dkWypw"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M5 14a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm7 0a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm7 0a2 2 0 1 1 0-4 2 2 0 0 1 0 4z"/></svg></span></span></button></div></div></div></div></div></div></div></div></div></div><div data-page-content="true"><p class="aWBg0w aZskFA T5LNnw _5r9bjg">To start using the Canva Connect APIs, you need to authorize your users using <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ undefined WkdUeQ _3bC2IQ" href="https://datatracker.ietf.org/doc/html/rfc6749" draggable="false" target="_blank" rel="noopener">OAuth 2.0<span id="_R_3g37jjd6_" class="V5YmAg"><span class="_pFsfA">(opens in a new tab or window)</span></span></a></span>.</p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">OAuth lets your integration authenticate the user, get their authorization to access the Connect API endpoints, and then perform actions on their behalf. Specifically, the Connect APIs use OAuth 2.0 with the <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ undefined WkdUeQ _3bC2IQ" href="https://datatracker.ietf.org/doc/html/rfc7636" draggable="false" target="_blank" rel="noopener">Authorization Code flow with Proof Key for Code Exchange (PKCE)<span id="_R_3g77jjd6_" class="V5YmAg"><span class="_pFsfA">(opens in a new tab or window)</span></span></a></span> using SHA-256.</p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">The authorization and authentication process involves the following steps:</p>
<ol class="Wnx9ow KOcv4g">
<li class="aWBg0w aZskFA T5LNnw nqORqQ">Obtain authorization from the Canva user for the scopes that your integration requires. After the user authorizes your integration, you&#x27;ll receive an authorization code at your specified redirect URL.</li>
<li class="aWBg0w aZskFA T5LNnw nqORqQ">Use the authorization code to generate access tokens, which lets your integration access Connect API resources. This lets your integration act on the user&#x27;s behalf.</li>
</ol>
<div class="csLfMg pzHaSw bZlJMA BMOCzQ NUKeTg V9xfvg fOwrSw EC2pjw LuBWVA" style="--TPsgaw:16px;--Wk647Q:16px;--ZGnFiQ:var(--v7HVIg)" role="note"><div class="aWBg0w aZskFA T5LNnw"><div class="Ka9auQ" style="--PmK0MA:8px;--TPF5Nw:baseline"><div class="aDc6Yg oNSf9w"><span aria-hidden="true" class="NA_Img dkWypw"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="M12 22a10 10 0 1 1 0-20 10 10 0 0 1 0 20zm0-1.5a8.5 8.5 0 1 0 0-17 8.5 8.5 0 0 0 0 17zm0-10a1 1 0 0 1 1 1V16a1 1 0 0 1-2 0v-4.5a1 1 0 0 1 1-1zm0-1.25a1.25 1.25 0 1 1 0-2.5 1.25 1.25 0 0 1 0 2.5z"/></svg></span></div><div class="aDc6Yg"><div class="NKI7AA"><p class="aWBg0w aZskFA T5LNnw _5r9bjg">There are libraries in various languages that provide support for handling the OAuth process. For more information, see the <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ undefined WkdUeQ _3bC2IQ" href="https://oauth.net/code/" draggable="false" target="_blank" rel="noopener">OAuth Community Site<span id="_R_76gj7jjd6_" class="V5YmAg"><span class="_pFsfA">(opens in a new tab or window)</span></span></a></span>.</p><p class="aWBg0w aZskFA T5LNnw _5r9bjg">You can also use the <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ undefined WkdUeQ _3bC2IQ" href="https://github.com/canva-sdks/canva-connect-api-starter-kit" draggable="false" target="_blank" rel="noopener">Canva Connect API Starter Kit<span id="_R_7agj7jjd6_" class="V5YmAg"><span class="_pFsfA">(opens in a new tab or window)</span></span></a></span> as a starting point for an authorization and authentication implementation.</p></div></div></div></div></div>
<div class="RmqL9Q VKCnLA _dCGnA j2i4RQ"><h2 id="prerequisites" class="_8yjy_A aZskFA T5LNnw">Prerequisites</h2></div>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">Before authenticating to the Canva Connect APIs, you must first create and configure your integration in the Developer Portal, including:</p>
<ul class="_9moHTg p6yDjQ">
<li class="aWBg0w aZskFA T5LNnw nqORqQ">Setting an integration name</li>
<li class="aWBg0w aZskFA T5LNnw nqORqQ">Generating and saving a client secret</li>
<li class="aWBg0w aZskFA T5LNnw nqORqQ">Selecting scopes</li>
<li class="aWBg0w aZskFA T5LNnw nqORqQ">Setting at least one authentication redirect URL</li>
</ul>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">For more information, see <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ WkdUeQ _3bC2IQ" href="/docs/connect/creating-integrations/" draggable="false">Creating integrations</a></span>.</p>
<div class="RmqL9Q VKCnLA _dCGnA j2i4RQ"><h2 id="obtain-user-authorization" class="_8yjy_A aZskFA T5LNnw">Obtain user authorization</h2></div>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">To obtain user authorization, you must direct your users to Canva&#x27;s authorization URL. This lets a user review and approve access for your integration.</p>
<div class="RmqL9Q qS6beg _dCGnA j2i4RQ"><h3 id="create-the-authorization-url" class="_7ATl0g aZskFA T5LNnw">Create the authorization URL</h3></div>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">The authorization URL that you direct users to is in the following format:</p>
<div class="KAHn4Q _0yBLKw theme dark"><div class="aWBg0w aZskFA T5LNnw"><pre class="gJynBg aRM_Zg prism-code language-text" style="color:rgba(81, 248, 238, 1);background-color:rgba(37, 38, 39, 1)"><div class="token-line _95Uu9Q _w84JA" style="color:rgba(81, 248, 238, 1)"><span class="token plain">https://www.canva.com/api/oauth/authorize?code_challenge=&lt;code challenge string&gt;&amp;code_challenge_method=s256&amp;scope=&lt;list of scopes&gt;&amp;response_type=code&amp;client_id=&lt;client ID&gt;&amp;state=&lt;optional state&gt;&amp;redirect_uri=&lt;redirect uri for your integration&gt;</span></div></pre></div><div class="AODmIw"><div class="J5ngnA BMOCzQ _6Mu4Ow FQ64gg LuBWVA" style="--s_rwAw:flex"><div class="BMOCzQ ESGcVw V9xfvg LuBWVA"><button class="_5KtATA LQzFZw VgvqkQ _8ERLTg MCgm0w _9KQGjA LQzFZw VgvqkQ _4_iekA j34Zww aqbYPg _3FvZZg h66YTA" type="button"><span class="vxQy1w"><span aria-hidden="true" class="uRWxVA dkWypw"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="currentColor" d="M9.985 3.75H8.707A.75.75 0 0 0 8 3.25H4a.75.75 0 0 0-.75.75v5c0 .414.336.75.75.75h.75V11H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h4a2 2 0 0 1 1.985 1.75ZM8 5h4a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2Zm0 1.25a.75.75 0 0 0-.75.75v5c0 .414.336.75.75.75h4a.75.75 0 0 0 .75-.75V7a.75.75 0 0 0-.75-.75H8Z"/></svg></span></span><span class="khPe7Q">Copy</span></button></div></div></div></div>
<div class="csLfMg pzHaSw bZlJMA BMOCzQ NUKeTg V9xfvg fOwrSw EC2pjw LuBWVA" style="--TPsgaw:16px;--Wk647Q:16px;--ZGnFiQ:var(--v7HVIg)" role="note"><div class="aWBg0w aZskFA T5LNnw"><div class="Ka9auQ" style="--PmK0MA:8px;--TPF5Nw:baseline"><div class="aDc6Yg oNSf9w"><span aria-hidden="true" class="NA_Img dkWypw"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="M12 22a10 10 0 1 1 0-20 10 10 0 0 1 0 20zm0-1.5a8.5 8.5 0 1 0 0-17 8.5 8.5 0 0 0 0 17zm0-10a1 1 0 0 1 1 1V16a1 1 0 0 1-2 0v-4.5a1 1 0 0 1 1-1zm0-1.25a1.25 1.25 0 1 1 0-2.5 1.25 1.25 0 0 1 0 2.5z"/></svg></span></div><div class="aDc6Yg"><div class="NKI7AA"><p class="aWBg0w aZskFA T5LNnw _5r9bjg">In your integration&#x27;s settings in the <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ undefined WkdUeQ _3bC2IQ" href="https://www.canva.com/developers/integrations/" draggable="false" target="_blank" rel="noopener">Developer Portal<span id="_R_6ahr7jjd6_" class="V5YmAg"><span class="_pFsfA">(opens in a new tab or window)</span></span></a></span>, there is an <strong class="_6HgDlQ">Authorization URL generator</strong> tool on the <strong class="_6HgDlQ">Authentication</strong> page that pre-fills most of the parameters for an authorization URL. If you use this tool, you must still provide your own <code class="qThh2A RhBcWA">code_challenge</code> and <code class="qThh2A RhBcWA">state</code> values, as well as verify the values for the other query parameters.</p></div></div></div></div></div>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">Create the URL, starting with <code class="qThh2A RhBcWA">https://www.canva.com/api/oauth/authorize?</code> and add the following query parameters:</p>
<ol class="Wnx9ow KOcv4g">
<li class="aWBg0w aZskFA T5LNnw nqORqQ">
<p class="aWBg0w aZskFA T5LNnw _5r9bjg"><strong class="_6HgDlQ"><code class="qThh2A RhBcWA">code_challenge</code></strong></p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">The <code class="qThh2A RhBcWA">code_challenge</code> string you provide is derived from another string, a <code class="qThh2A RhBcWA">code_verifier</code>. You must first create a <code class="qThh2A RhBcWA">code_verifier</code> value, and then transform the <code class="qThh2A RhBcWA">code_verifier</code> into the <code class="qThh2A RhBcWA">code_challenge</code> string. For more information, see the <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ undefined WkdUeQ _3bC2IQ" href="https://datatracker.ietf.org/doc/html/rfc7636#section-4.1" draggable="false" target="_blank" rel="noopener">PKCE specification<span id="_R_3ogi37jjd6_" class="V5YmAg"><span class="_pFsfA">(opens in a new tab or window)</span></span></a></span>.</p>
<ol class="Wnx9ow KOcv4g">
<li class="aWBg0w aZskFA T5LNnw nqORqQ">
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">Create the <code class="qThh2A RhBcWA">code_verifier</code> string. It must be a high-entropy cryptographically random string that is between 43 and 128 characters long. Only ASCII letters, numbers, and <code class="qThh2A RhBcWA">-</code>, <code class="qThh2A RhBcWA">.</code>, <code class="qThh2A RhBcWA">_</code>, or <code class="qThh2A RhBcWA">~</code> characters are allowed.</p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">You must securely store the <code class="qThh2A RhBcWA">code_verifier</code> string in your client, because you&#x27;ll use it later to generate an access token.</p>
<div class="csLfMg pzHaSw bZlJMA BMOCzQ WoF2rw V9xfvg fOwrSw EC2pjw LuBWVA" style="--TPsgaw:16px;--Wk647Q:16px;--ZGnFiQ:var(--OQ2gpA)" role="note"><div class="aWBg0w aZskFA T5LNnw"><div class="Ka9auQ" style="--PmK0MA:8px;--TPF5Nw:baseline"><div class="aDc6Yg oNSf9w"><span aria-hidden="true" class="NA_Img dkWypw"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="m13.8 4.15 6.86 13.97a2 2 0 0 1-1.8 2.88H5.14a2 2 0 0 1-1.8-2.88L10.2 4.15a2 2 0 0 1 3.6 0zm-1.35.66a.5.5 0 0 0-.9 0L4.7 18.78a.5.5 0 0 0 .45.72h13.72a.5.5 0 0 0 .45-.72L12.45 4.81zM12 18.25a1.25 1.25 0 1 1 0-2.5 1.25 1.25 0 0 1 0 2.5zM12 9a1 1 0 0 1 1 1v3.5a1 1 0 0 1-2 0V10a1 1 0 0 1 1-1z"/></svg></span></div><div class="aDc6Yg"><div class="NKI7AA"><p class="aWBg0w aZskFA T5LNnw _5r9bjg">The <code class="qThh2A RhBcWA">code_verifier</code> value must not be accessible by the user or their browser.</p></div></div></div></div></div>
</li>
<li class="aWBg0w aZskFA T5LNnw nqORqQ">
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">Generate the <code class="qThh2A RhBcWA">code_challenge</code> string by SHA-256 hashing the <code class="qThh2A RhBcWA">code_verifier</code> value and then encoding that result into a URL-safe base64 string.</p>
</li>
</ol>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">You can use the <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ WkdUeQ _3bC2IQ" href="/docs/connect/authentication/#example-code-for-codeverifier-and-codechallenge-strings" draggable="false">sample code shown below</a></span> to generate the <code class="qThh2A RhBcWA">code_verifier</code> and <code class="qThh2A RhBcWA">code_challenge</code> strings.</p>
<div class="csLfMg pzHaSw bZlJMA BMOCzQ WoF2rw V9xfvg fOwrSw EC2pjw LuBWVA" style="--TPsgaw:16px;--Wk647Q:16px;--ZGnFiQ:var(--OQ2gpA)" role="note"><div class="aWBg0w aZskFA T5LNnw"><div class="Ka9auQ" style="--PmK0MA:8px;--TPF5Nw:baseline"><div class="aDc6Yg oNSf9w"><span aria-hidden="true" class="NA_Img dkWypw"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="m13.8 4.15 6.86 13.97a2 2 0 0 1-1.8 2.88H5.14a2 2 0 0 1-1.8-2.88L10.2 4.15a2 2 0 0 1 3.6 0zm-1.35.66a.5.5 0 0 0-.9 0L4.7 18.78a.5.5 0 0 0 .45.72h13.72a.5.5 0 0 0 .45-.72L12.45 4.81zM12 18.25a1.25 1.25 0 1 1 0-2.5 1.25 1.25 0 0 1 0 2.5zM12 9a1 1 0 0 1 1 1v3.5a1 1 0 0 1-2 0V10a1 1 0 0 1 1-1z"/></svg></span></div><div class="aDc6Yg"><div class="NKI7AA"><p class="aWBg0w aZskFA T5LNnw _5r9bjg">The <code class="qThh2A RhBcWA">code_verifier</code> and <code class="qThh2A RhBcWA">code_challenge</code> values should be unique for each request.</p></div></div></div></div></div>
</li>
<li class="aWBg0w aZskFA T5LNnw nqORqQ">
<p class="aWBg0w aZskFA T5LNnw _5r9bjg"><strong class="_6HgDlQ"><code class="qThh2A RhBcWA">code_challenge_method</code></strong></p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">This must be set to <code class="qThh2A RhBcWA">S256</code> (SHA-256).</p>
</li>
<li class="aWBg0w aZskFA T5LNnw nqORqQ">
<p class="aWBg0w aZskFA T5LNnw _5r9bjg"><strong class="_6HgDlQ"><code class="qThh2A RhBcWA">scope</code></strong></p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">This is a space-separated list of <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ WkdUeQ _3bC2IQ" href="/docs/connect/appendix/scopes/" draggable="false">scopes</a></span> requested by your integration.</p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">The scopes you request must already be set in your integration settings in the Developer Portal. You can&#x27;t request any scopes you haven&#x27;t set in your integration&#x27;s settings. For information on setting scopes, see <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ WkdUeQ _3bC2IQ" href="/docs/connect/creating-integrations/#step-3-set-scopes" draggable="false">Creating integrations</a></span>.</p>
<div class="csLfMg pzHaSw bZlJMA BMOCzQ NUKeTg V9xfvg fOwrSw EC2pjw LuBWVA" style="--TPsgaw:16px;--Wk647Q:16px;--ZGnFiQ:var(--v7HVIg)" role="note"><div class="aWBg0w aZskFA T5LNnw"><div class="Ka9auQ" style="--PmK0MA:8px;--TPF5Nw:baseline"><div class="aDc6Yg oNSf9w"><span aria-hidden="true" class="NA_Img dkWypw"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="M12 22a10 10 0 1 1 0-20 10 10 0 0 1 0 20zm0-1.5a8.5 8.5 0 1 0 0-17 8.5 8.5 0 0 0 0 17zm0-10a1 1 0 0 1 1 1V16a1 1 0 0 1-2 0v-4.5a1 1 0 0 1 1-1zm0-1.25a1.25 1.25 0 1 1 0-2.5 1.25 1.25 0 0 1 0 2.5z"/></svg></span></div><div class="aDc6Yg"><div class="NKI7AA"><p class="aWBg0w aZskFA T5LNnw _5r9bjg">You must be explicit when listing scopes.</p><p class="aWBg0w aZskFA T5LNnw _5r9bjg">For example, specifying <code class="qThh2A RhBcWA">asset:write</code> doesn&#x27;t grant <code class="qThh2A RhBcWA">asset:read</code> permissions. You must specify <em class="HaapXA">both</em> in the scope string, for example: <code class="qThh2A RhBcWA">asset:read asset:write</code>.</p></div></div></div></div></div>
</li>
<li class="aWBg0w aZskFA T5LNnw nqORqQ">
<p class="aWBg0w aZskFA T5LNnw _5r9bjg"><strong class="_6HgDlQ"><code class="qThh2A RhBcWA">response_type</code></strong></p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">This must be set to <code class="qThh2A RhBcWA">code</code>.</p>
</li>
<li class="aWBg0w aZskFA T5LNnw nqORqQ">
<p class="aWBg0w aZskFA T5LNnw _5r9bjg"><strong class="_6HgDlQ"><code class="qThh2A RhBcWA">client_id</code></strong></p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">This value is the unique ID that identifies your client. You can get this value from your integration settings in the <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ undefined WkdUeQ _3bC2IQ" href="https://www.canva.com/developers/integrations/connect-api" draggable="false" target="_blank" rel="noopener">Developer Portal<span id="_R_eii37jjd6_" class="V5YmAg"><span class="_pFsfA">(opens in a new tab or window)</span></span></a></span>.</p>
</li>
<li class="aWBg0w aZskFA T5LNnw nqORqQ">
<p class="aWBg0w aZskFA T5LNnw _5r9bjg"><strong class="_6HgDlQ"><code class="qThh2A RhBcWA">state</code></strong> (Optional)</p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">The <code class="qThh2A RhBcWA">state</code> parameter serves two primary purposes:</p>
<ul class="_9moHTg p6yDjQ">
<li class="aWBg0w aZskFA T5LNnw nqORqQ">It acts as a countermeasure against <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ undefined WkdUeQ _3bC2IQ" href="https://en.wikipedia.org/wiki/Cross-site_request_forgery" draggable="false" target="_blank" rel="noopener">Cross-Site Request Forgery (CSRF)<span id="_R_d4r237jjd6_" class="V5YmAg"><span class="_pFsfA">(opens in a new tab or window)</span></span></a></span> attacks by maintaining a unique session state between your integration and the Canva API. For more information, see the <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ undefined WkdUeQ _3bC2IQ" href="https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html" draggable="false" target="_blank" rel="noopener">OWASP Cross-Site Request Forgery Prevention Cheat Sheet<span id="_R_e4r237jjd6_" class="V5YmAg"><span class="_pFsfA">(opens in a new tab or window)</span></span></a></span>.</li>
<li class="aWBg0w aZskFA T5LNnw nqORqQ">It helps preserve the application state through the OAuth flow.</li>
</ul>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">Although this parameter is optional to include in the authorization URL, it&#x27;s highly recommended. It makes sure that the response your integration receives corresponds to the request initiated by the user, thereby preventing bad actors from forging requests.</p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">When creating the <code class="qThh2A RhBcWA">state</code> value, it must be a high-entropy random string and it should be unique for each request. You can use the <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ WkdUeQ _3bC2IQ" href="/docs/connect/authentication/#example-code-for-state-string" draggable="false">sample code shown below</a></span> to generate the <code class="qThh2A RhBcWA">state</code> string.</p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">You must securely store the <code class="qThh2A RhBcWA">state</code> string in your client, so you can use it later to verify the response.</p>
<div class="csLfMg pzHaSw bZlJMA BMOCzQ WoF2rw V9xfvg fOwrSw EC2pjw LuBWVA" style="--TPsgaw:16px;--Wk647Q:16px;--ZGnFiQ:var(--OQ2gpA)" role="note"><div class="aWBg0w aZskFA T5LNnw"><div class="Ka9auQ" style="--PmK0MA:8px;--TPF5Nw:baseline"><div class="aDc6Yg oNSf9w"><span aria-hidden="true" class="NA_Img dkWypw"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="m13.8 4.15 6.86 13.97a2 2 0 0 1-1.8 2.88H5.14a2 2 0 0 1-1.8-2.88L10.2 4.15a2 2 0 0 1 3.6 0zm-1.35.66a.5.5 0 0 0-.9 0L4.7 18.78a.5.5 0 0 0 .45.72h13.72a.5.5 0 0 0 .45-.72L12.45 4.81zM12 18.25a1.25 1.25 0 1 1 0-2.5 1.25 1.25 0 0 1 0 2.5zM12 9a1 1 0 0 1 1 1v3.5a1 1 0 0 1-2 0V10a1 1 0 0 1 1-1z"/></svg></span></div><div class="aDc6Yg"><div class="NKI7AA"><p class="aWBg0w aZskFA T5LNnw _5r9bjg">The <code class="qThh2A RhBcWA">state</code> parameter must not be used to store the <code class="qThh2A RhBcWA">code_verifier</code> value.</p></div></div></div></div></div>
</li>
<li class="aWBg0w aZskFA T5LNnw nqORqQ">
<p class="aWBg0w aZskFA T5LNnw _5r9bjg"><strong class="_6HgDlQ"><code class="qThh2A RhBcWA">redirect_uri</code></strong> (Optional)</p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">This is the URL to redirect the user to after they authorize your integration.</p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">Although this parameter is optional to include in the authorization URL, you must have at least one redirect URL set in your integration settings in the Developer Portal. The URL set in this query parameter must be one that you have already set in your integration settings.</p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">If you have <em class="HaapXA">only one</em> redirect URL set in your integration settings, you don&#x27;t need to provide this parameter.</p>
<div class="csLfMg pzHaSw bZlJMA BMOCzQ NUKeTg V9xfvg fOwrSw EC2pjw LuBWVA" style="--TPsgaw:16px;--Wk647Q:16px;--ZGnFiQ:var(--v7HVIg)" role="note"><div class="aWBg0w aZskFA T5LNnw"><div class="Ka9auQ" style="--PmK0MA:8px;--TPF5Nw:baseline"><div class="aDc6Yg oNSf9w"><span aria-hidden="true" class="NA_Img dkWypw"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="M12 22a10 10 0 1 1 0-20 10 10 0 0 1 0 20zm0-1.5a8.5 8.5 0 1 0 0-17 8.5 8.5 0 0 0 0 17zm0-10a1 1 0 0 1 1 1V16a1 1 0 0 1-2 0v-4.5a1 1 0 0 1 1-1zm0-1.25a1.25 1.25 0 1 1 0-2.5 1.25 1.25 0 0 1 0 2.5z"/></svg></span></div><div class="aDc6Yg"><div class="NKI7AA"><p class="aWBg0w aZskFA T5LNnw _5r9bjg">If you have multiple redirect URLs set in your integration settings and this query parameter isn&#x27;t supplied in the authorization URL, then the first redirect URL that&#x27;s set in your integration&#x27;s settings is used by default.</p></div></div></div></div></div>
</li>
</ol>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">After adding the preceding query parameters, an example authorization URL might look similar to the following:</p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg"><code class="qThh2A RhBcWA">https://www.canva.com/api/oauth/authorize?code_challenge=eeeAbcdefgh123456789Vz96F9UIv8EHwnmibz3Djx3EE&amp;code_challenge_method=s256&amp;scope=asset:read%20asset:write%20design:meta:read%20folder:read%20comment:write&amp;response_type=code&amp;client_id=OCABC12-DeF</code></p>
<div class="RmqL9Q nxIQkQ _dCGnA j2i4RQ"><h4 id="example-code-for-codeverifier-and-codechallenge-strings" class="_5Gynyg aZskFA T5LNnw">Example code for <code class="WVYxeQ">code_verifier</code> &amp; <code class="WVYxeQ">code_challenge</code> strings</h4></div>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">You can use the following sample code to generate the <code class="qThh2A RhBcWA">code_verifier</code> and <code class="qThh2A RhBcWA">code_challenge</code> strings.</p>
<div class="KAHn4Q _0yBLKw theme dark"><div class="aWBg0w aZskFA T5LNnw"><pre class="aRM_Zg prism-code language-js" style="color:rgba(81, 248, 238, 1);background-color:rgba(37, 38, 39, 1)"><div class="token-line _95Uu9Q _w84JA" style="color:rgba(81, 248, 238, 1)"><span class="token keyword module" style="color:rgba(246, 142, 20, 1)">import</span><span class="token plain"> </span><span class="token imports">crypto</span><span class="token plain"> </span><span class="token keyword module" style="color:rgba(246, 142, 20, 1)">from</span><span class="token plain"> </span><span class="token string" style="color:rgba(154, 242, 85, 1)">&quot;crypto&quot;</span><span class="token punctuation" style="color:rgb(255, 255, 255)">;</span><span class="token plain"></span></div><div class="token-line _95Uu9Q _w84JA" style="color:rgba(81, 248, 238, 1)"><span class="token plain"></span><span class="token keyword" style="color:rgba(246, 142, 20, 1)">const</span><span class="token plain"> codeVerifier </span><span class="token operator" style="color:rgb(255, 157, 0)">=</span><span class="token plain"> crypto</span><span class="token punctuation" style="color:rgb(255, 255, 255)">.</span><span class="token method function property-access" style="color:rgba(248, 181, 81, 1)">randomBytes</span><span class="token punctuation" style="color:rgb(255, 255, 255)">(</span><span class="token number" style="color:rgba(248, 81, 161, 1)">96</span><span class="token punctuation" style="color:rgb(255, 255, 255)">)</span><span class="token punctuation" style="color:rgb(255, 255, 255)">.</span><span class="token method function property-access" style="color:rgba(248, 181, 81, 1)">toString</span><span class="token punctuation" style="color:rgb(255, 255, 255)">(</span><span class="token string" style="color:rgba(154, 242, 85, 1)">&quot;base64url&quot;</span><span class="token punctuation" style="color:rgb(255, 255, 255)">)</span><span class="token punctuation" style="color:rgb(255, 255, 255)">;</span><span class="token plain"></span></div><div class="token-line _95Uu9Q _w84JA" style="color:rgba(81, 248, 238, 1)"><span class="token plain"></span><span class="token keyword" style="color:rgba(246, 142, 20, 1)">const</span><span class="token plain"> codeChallenge </span><span class="token operator" style="color:rgb(255, 157, 0)">=</span><span class="token plain"> crypto</span></div><div class="token-line _95Uu9Q _w84JA" style="color:rgba(81, 248, 238, 1)"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(255, 255, 255)">.</span><span class="token method function property-access" style="color:rgba(248, 181, 81, 1)">createHash</span><span class="token punctuation" style="color:rgb(255, 255, 255)">(</span><span class="token string" style="color:rgba(154, 242, 85, 1)">&quot;sha256&quot;</span><span class="token punctuation" style="color:rgb(255, 255, 255)">)</span><span class="token plain"></span></div><div class="token-line _95Uu9Q _w84JA" style="color:rgba(81, 248, 238, 1)"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(255, 255, 255)">.</span><span class="token method function property-access" style="color:rgba(248, 181, 81, 1)">update</span><span class="token punctuation" style="color:rgb(255, 255, 255)">(</span><span class="token plain">codeVerifier</span><span class="token punctuation" style="color:rgb(255, 255, 255)">)</span><span class="token plain"></span></div><div class="token-line _95Uu9Q _w84JA" style="color:rgba(81, 248, 238, 1)"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(255, 255, 255)">.</span><span class="token method function property-access" style="color:rgba(248, 181, 81, 1)">digest</span><span class="token punctuation" style="color:rgb(255, 255, 255)">(</span><span class="token string" style="color:rgba(154, 242, 85, 1)">&quot;base64url&quot;</span><span class="token punctuation" style="color:rgb(255, 255, 255)">)</span><span class="token punctuation" style="color:rgb(255, 255, 255)">;</span></div></pre></div><div class="AODmIw"><div class="J5ngnA BMOCzQ _6Mu4Ow FQ64gg LuBWVA" style="--s_rwAw:flex"><span class="dfv3Cw nlLhLg nbfwjw r6aWjA z67bbQ BMOCzQ rgwUqw LuBWVA">JS</span><div class="BMOCzQ ESGcVw V9xfvg LuBWVA"><button class="_5KtATA LQzFZw VgvqkQ _8ERLTg MCgm0w _9KQGjA LQzFZw VgvqkQ _4_iekA j34Zww aqbYPg _3FvZZg h66YTA" type="button"><span class="vxQy1w"><span aria-hidden="true" class="uRWxVA dkWypw"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="currentColor" d="M9.985 3.75H8.707A.75.75 0 0 0 8 3.25H4a.75.75 0 0 0-.75.75v5c0 .414.336.75.75.75h.75V11H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h4a2 2 0 0 1 1.985 1.75ZM8 5h4a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2Zm0 1.25a.75.75 0 0 0-.75.75v5c0 .414.336.75.75.75h4a.75.75 0 0 0 .75-.75V7a.75.75 0 0 0-.75-.75H8Z"/></svg></span></span><span class="khPe7Q">Copy</span></button></div></div></div></div>
<div class="RmqL9Q nxIQkQ _dCGnA j2i4RQ"><h4 id="example-code-for-state-string" class="_5Gynyg aZskFA T5LNnw">Example code for <code class="WVYxeQ">state</code> string</h4></div>
<div class="KAHn4Q _0yBLKw theme dark"><div class="aWBg0w aZskFA T5LNnw"><pre class="aRM_Zg prism-code language-js" style="color:rgba(81, 248, 238, 1);background-color:rgba(37, 38, 39, 1)"><div class="token-line _95Uu9Q _w84JA" style="color:rgba(81, 248, 238, 1)"><span class="token keyword module" style="color:rgba(246, 142, 20, 1)">import</span><span class="token plain"> </span><span class="token imports">crypto</span><span class="token plain"> </span><span class="token keyword module" style="color:rgba(246, 142, 20, 1)">from</span><span class="token plain"> </span><span class="token string" style="color:rgba(154, 242, 85, 1)">&quot;crypto&quot;</span><span class="token punctuation" style="color:rgb(255, 255, 255)">;</span><span class="token plain"></span></div><div class="token-line _95Uu9Q _w84JA" style="color:rgba(81, 248, 238, 1)"><span class="token plain"></span><span class="token keyword" style="color:rgba(246, 142, 20, 1)">const</span><span class="token plain"> state </span><span class="token operator" style="color:rgb(255, 157, 0)">=</span><span class="token plain"> crypto</span><span class="token punctuation" style="color:rgb(255, 255, 255)">.</span><span class="token method function property-access" style="color:rgba(248, 181, 81, 1)">randomBytes</span><span class="token punctuation" style="color:rgb(255, 255, 255)">(</span><span class="token number" style="color:rgba(248, 81, 161, 1)">96</span><span class="token punctuation" style="color:rgb(255, 255, 255)">)</span><span class="token punctuation" style="color:rgb(255, 255, 255)">.</span><span class="token method function property-access" style="color:rgba(248, 181, 81, 1)">toString</span><span class="token punctuation" style="color:rgb(255, 255, 255)">(</span><span class="token string" style="color:rgba(154, 242, 85, 1)">&quot;base64url&quot;</span><span class="token punctuation" style="color:rgb(255, 255, 255)">)</span><span class="token punctuation" style="color:rgb(255, 255, 255)">;</span></div></pre></div><div class="AODmIw"><div class="J5ngnA BMOCzQ _6Mu4Ow FQ64gg LuBWVA" style="--s_rwAw:flex"><span class="dfv3Cw nlLhLg nbfwjw r6aWjA z67bbQ BMOCzQ rgwUqw LuBWVA">JS</span><div class="BMOCzQ ESGcVw V9xfvg LuBWVA"><button class="_5KtATA LQzFZw VgvqkQ _8ERLTg MCgm0w _9KQGjA LQzFZw VgvqkQ _4_iekA j34Zww aqbYPg _3FvZZg h66YTA" type="button"><span class="vxQy1w"><span aria-hidden="true" class="uRWxVA dkWypw"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="currentColor" d="M9.985 3.75H8.707A.75.75 0 0 0 8 3.25H4a.75.75 0 0 0-.75.75v5c0 .414.336.75.75.75h.75V11H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h4a2 2 0 0 1 1.985 1.75ZM8 5h4a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2Zm0 1.25a.75.75 0 0 0-.75.75v5c0 .414.336.75.75.75h4a.75.75 0 0 0 .75-.75V7a.75.75 0 0 0-.75-.75H8Z"/></svg></span></span><span class="khPe7Q">Copy</span></button></div></div></div></div>
<div class="RmqL9Q qS6beg _dCGnA j2i4RQ"><h3 id="send-the-user-to-the-authorization-url" class="_7ATl0g aZskFA T5LNnw">Send the user to the authorization URL</h3></div>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">You must direct your users to the authorization URL that you created to get their approval for your integration and the requested scopes.</p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">They will see a prompt similar to the following:</p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg"><img alt="User authorization prompt" loading="lazy" width="428" height="609" decoding="async" data-nimg="1" class="mYgLTQ PHsckw" style="color:transparent" src="/_next/static/media/authentication_approval.c416eae2.png"/></p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">After they authorize your integration, they are redirected to your redirect URL with the following query parameters:</p>
<div class="B97Acg xBuJqg"><div id="code" class="Akqgug" data-toc="true" data-toc-labelledby="_R_bn7jjd6_"><div class="K_kDZg BMOCzQ EC2pjw _6Mu4Ow pveEpQ FQ64gg LuBWVA" style="--s_rwAw:flex;--WtUbjw:4px"><span id="_R_bn7jjd6_" class="VgvqkQ aZskFA Ywwu0g"><code class="j7ZOow">code</code></span><span class="JYIidw aZskFA T5LNnw"><code class="DAJJ9w"></code></span><div class="K_kDZg BMOCzQ _6Mu4Ow FQ64gg LuBWVA" style="--s_rwAw:flex"><span class="dfv3Cw nlLhLg nbfwjw AZe8wQ BMOCzQ Rs_tKg LuBWVA">Required</span></div></div><div class="aWBg0w aZskFA Ywwu0g RIfP5A"><p class="aWBg0w aZskFA T5LNnw _5r9bjg">The authorization code you can use to <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ WkdUeQ _3bC2IQ" href="/docs/connect/authentication/#generate-access-tokens" draggable="false">generate an access
token</a></span>.</p></div></div><div id="state" class="Akqgug" data-toc="true" data-toc-labelledby="_R_jn7jjd6_"><div class="K_kDZg BMOCzQ EC2pjw _6Mu4Ow pveEpQ FQ64gg LuBWVA" style="--s_rwAw:flex;--WtUbjw:4px"><span id="_R_jn7jjd6_" class="VgvqkQ aZskFA Ywwu0g"><code class="j7ZOow">state</code></span><span class="JYIidw aZskFA T5LNnw"><code class="DAJJ9w"></code></span><div class="K_kDZg BMOCzQ _6Mu4Ow FQ64gg LuBWVA" style="--s_rwAw:flex"><span class="dfv3Cw nlLhLg nbfwjw AZe8wQ _1__fPA BMOCzQ jhljBg LuBWVA">Optional</span></div></div><div class="aWBg0w aZskFA Ywwu0g RIfP5A"><p class="aWBg0w aZskFA T5LNnw _5r9bjg">The value of the <code class="qThh2A RhBcWA">state</code> parameter, if it was provided with the initial request.</p><p class="aWBg0w aZskFA T5LNnw _5r9bjg">To prevent forgery of cross-site requests, you must verify that the received <code class="qThh2A RhBcWA">state</code> value matches the one in the authorization URL you sent to the user. If they don&#x27;t match, you must stop the authorization flow and return an error to the user.</p></div></div></div>
<div class="RmqL9Q VKCnLA _dCGnA j2i4RQ"><h2 id="generate-access-tokens" class="_8yjy_A aZskFA T5LNnw">Generate access tokens</h2></div>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">After you&#x27;ve obtained user authorization and received an authorization code, you can exchange the code for an access token (that lets you act on the user&#x27;s behalf) and a refresh token (that you can use to get new access tokens).</p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">Because access tokens are only valid for a short period time, you can handle requesting new access tokens using a refresh token instead of having to re-authorize the user to get a new authorization code.</p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">An overview of the token request process is shown in the diagram below:</p>
<figure class="D1R0Dw PHsckw"><img alt="Diagram showing the token request flow, adapted from OAuth 2.0 specification" loading="lazy" width="1600" height="976" decoding="async" data-nimg="1" class="mYgLTQ PHsckw" style="color:transparent" src="/_next/static/media/connect_token_flow_1600x976.6d4762db.png"/><figcaption class="JBdUzg"><div class="aWBg0w B8t6MQ QxuLlQ">Token request flow (Adapted from the OAuth 2.0 specification).</div></figcaption></figure>
<div class="csLfMg pzHaSw bZlJMA BMOCzQ NUKeTg V9xfvg fOwrSw EC2pjw LuBWVA" style="--TPsgaw:16px;--Wk647Q:16px;--ZGnFiQ:var(--v7HVIg)" role="note"><div class="aWBg0w aZskFA T5LNnw"><div class="Ka9auQ" style="--PmK0MA:8px;--TPF5Nw:baseline"><div class="aDc6Yg oNSf9w"><span aria-hidden="true" class="NA_Img dkWypw"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="M12 22a10 10 0 1 1 0-20 10 10 0 0 1 0 20zm0-1.5a8.5 8.5 0 1 0 0-17 8.5 8.5 0 0 0 0 17zm0-10a1 1 0 0 1 1 1V16a1 1 0 0 1-2 0v-4.5a1 1 0 0 1 1-1zm0-1.25a1.25 1.25 0 1 1 0-2.5 1.25 1.25 0 0 1 0 2.5z"/></svg></span></div><div class="aDc6Yg"><div class="NKI7AA"><p class="aWBg0w aZskFA T5LNnw _5r9bjg">Requests that require authenticating with your client ID and client secret can&#x27;t be made from a web-browser client. They must come from your backend, otherwise they&#x27;ll be blocked by Canva&#x27;s <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ undefined WkdUeQ _3bC2IQ" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS" draggable="false" target="_blank" rel="noopener">Cross-Origin Resource Sharing (CORS)<span id="_R_1qkf7jjd6_" class="V5YmAg"><span class="_pFsfA">(opens in a new tab or window)</span></span></a></span> policy.</p></div></div></div></div></div>
<div class="RmqL9Q qS6beg _dCGnA j2i4RQ"><h3 id="use-an-authorization-code" class="_7ATl0g aZskFA T5LNnw">Use an authorization code</h3></div>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">To exchange an authorization code for an access token, use the <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ WkdUeQ _3bC2IQ" href="/docs/connect/api-reference/authentication/generate-access-token/" draggable="false">Generate an access token endpoint</a></span>.</p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">Some points to note when using the endpoint with an authorization code:</p>
<ul class="_9moHTg p6yDjQ">
<li class="aWBg0w aZskFA T5LNnw nqORqQ">Requests to the endpoint must be authenticated, and we recommend using the <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ undefined WkdUeQ _3bC2IQ" href="https://en.wikipedia.org/wiki/Basic_access_authentication" draggable="false" target="_blank" rel="noopener">basic access authentication<span id="_R_38kv7jjd6_" class="V5YmAg"><span class="_pFsfA">(opens in a new tab or window)</span></span></a></span> method. For basic access authentication, the <code class="qThh2A RhBcWA">{credentials}</code> string must be a Base64 encoded value of <code class="qThh2A RhBcWA">{client id}:{client secret}</code>.</li>
<li class="aWBg0w aZskFA T5LNnw nqORqQ">When exchanging an authorization code for an access token, you must set <code class="qThh2A RhBcWA">grant_type</code> to <code class="qThh2A RhBcWA">authorization_code</code> .</li>
<li class="aWBg0w aZskFA T5LNnw nqORqQ">You must provide the <code class="qThh2A RhBcWA">code_verifier</code> value that you generated when <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ WkdUeQ _3bC2IQ" href="/docs/connect/authentication/#create-the-authorization-url" draggable="false">creating the user authorization URL</a></span>.</li>
<li class="aWBg0w aZskFA T5LNnw nqORqQ">You must provide the authorization code you received after the <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ WkdUeQ _3bC2IQ" href="/docs/connect/authentication/#send-the-user-to-the-authorization-url" draggable="false">user authorized your integration</a></span>.</li>
</ul>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">The endpoint reference includes <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ WkdUeQ _3bC2IQ" href="/docs/connect/api-reference/authentication/generate-access-token/#example-request" draggable="false">example request code</a></span> in various languages.</p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">A successful response from the endpoint includes the access token, the expiry time for the token, and a refresh token.</p>
<div class="RmqL9Q qS6beg _dCGnA j2i4RQ"><h3 id="use-a-refresh-token" class="_7ATl0g aZskFA T5LNnw">Use a refresh token</h3></div>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">When an access token expires or becomes invalid, you can use a refresh token from a previous access token request to get a new access token.</p>
<div class="csLfMg pzHaSw bZlJMA BMOCzQ NUKeTg V9xfvg fOwrSw EC2pjw LuBWVA" style="--TPsgaw:16px;--Wk647Q:16px;--ZGnFiQ:var(--v7HVIg)" role="note"><div class="aWBg0w aZskFA T5LNnw"><div class="Ka9auQ" style="--PmK0MA:8px;--TPF5Nw:baseline"><div class="aDc6Yg oNSf9w"><span aria-hidden="true" class="NA_Img dkWypw"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="M12 22a10 10 0 1 1 0-20 10 10 0 0 1 0 20zm0-1.5a8.5 8.5 0 1 0 0-17 8.5 8.5 0 0 0 0 17zm0-10a1 1 0 0 1 1 1V16a1 1 0 0 1-2 0v-4.5a1 1 0 0 1 1-1zm0-1.25a1.25 1.25 0 1 1 0-2.5 1.25 1.25 0 0 1 0 2.5z"/></svg></span></div><div class="aDc6Yg"><div class="NKI7AA"><p class="aWBg0w aZskFA T5LNnw _5r9bjg">Refresh tokens can&#x27;t be used to access resources on protected APIs. They are only used for generating new access tokens.</p></div></div></div></div></div>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">To exchange a refresh token for an access token, you again use the <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ WkdUeQ _3bC2IQ" href="/docs/connect/api-reference/authentication/generate-access-token/" draggable="false">Generate an access token endpoint</a></span>.</p>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">Some points to note when using the endpoint with a refresh token:</p>
<ul class="_9moHTg p6yDjQ">
<li class="aWBg0w aZskFA T5LNnw nqORqQ">Requests to the endpoint must be authenticated, and we recommend using the <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ undefined WkdUeQ _3bC2IQ" href="https://en.wikipedia.org/wiki/Basic_access_authentication" draggable="false" target="_blank" rel="noopener">basic access authentication<span id="_R_38lv7jjd6_" class="V5YmAg"><span class="_pFsfA">(opens in a new tab or window)</span></span></a></span> method. For basic access authentication, the <code class="qThh2A RhBcWA">{credentials}</code> string must be a Base64 encoded value of <code class="qThh2A RhBcWA">{client id}:{client secret}</code>.</li>
<li class="aWBg0w aZskFA T5LNnw nqORqQ">When exchanging a refresh token for a new access token, you must set <code class="qThh2A RhBcWA">grant_type</code> to <code class="qThh2A RhBcWA">refresh_token</code>.</li>
<li class="aWBg0w aZskFA T5LNnw nqORqQ">You must provide a refresh token from a previous token request.</li>
<li class="aWBg0w aZskFA T5LNnw nqORqQ">Each refresh token can only be used once.</li>
</ul>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">A successful response from the endpoint includes a new access token, the expiry time for the new token, and another refresh token.</p>
<div class="RmqL9Q VKCnLA _dCGnA j2i4RQ"><h2 id="introspect-an-access-token" class="_8yjy_A aZskFA T5LNnw">Introspect an access token</h2></div>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">You can use the <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ WkdUeQ _3bC2IQ" href="/docs/connect/api-reference/authentication/introspect-access-token/" draggable="false">Introspect an access token</a></span> endpoint to see whether an access token or refresh token is valid and active. You can also verify some token properties, such as its claims, scopes, and validity times.</p>
<div class="RmqL9Q VKCnLA _dCGnA j2i4RQ"><h2 id="revoke-a-token" class="_8yjy_A aZskFA T5LNnw">Revoke a token</h2></div>
<p class="aWBg0w aZskFA T5LNnw _5r9bjg">If necessary, you can use the <span class="VgvqkQ aZskFA T5LNnw"><a class="Ej7lEg orqWqQ WkdUeQ _3bC2IQ" href="/docs/connect/api-reference/authentication/revoke-token/" draggable="false">Revoke a token</a></span> endpoint to revoke an access token or refresh token.</p></div></div></div><div class="YwNsPA"></div></div></div></div></div><div class="BMOCzQ TwIyqg HwOMuA _5BaZ9A LuBWVA"><div class="BMOCzQ EC2pjw _5DYjkQ HwOMuA _5BaZ9A LuBWVA" style="--WtUbjw:16px;--ICTGkg:16px"><div class="jv_R6g" style="--NZu1Zw:8px;--okeDpw:end" id="main-portal-root"></div></div></div></main><footer class="eM77lg JX_EIA"><div class="_3vTnSQ theme dark"><div class="tz4z3Q"><div class="jqn1OA aZskFA u16U_g"><div class="kRwg9w"><a href="https://community.canva.dev/" target="_blank" rel="noreferrer">Community</a><a href="https://canva-external.atlassian.net/servicedesk/customer/portal/2/group/2" target="_blank" rel="noopener noreferrer">Get Help</a><a href="https://github.com/canva-sdks/canva-connect-api-starter-kit" target="_blank" rel="noreferrer">GitHub</a></div></div></div><div class="S7SwHg"><div class="M2opVQ"><svg xmlns="http://www.w3.org/2000/svg" width="189" height="88" fill="none" viewBox="0 0 189 88"><path fill="#E2F2EA" fill-opacity="0.47" d="M79.345 65.84c-1.218-.589-2.448-1.156-3.649-1.773a151 151 0 0 1-4.341-2.325c-1.258-.7-2.498-1.428-3.726-2.173-.563-.34-1.072-.76-1.616-1.128-.492-.333-.998-.648-1.5-.968-.077-.05-.165-.083-.228-.114.45-.635.193-1.16-.631-1.667-.805-.495-1.57-1.046-2.357-1.575-.118.265-.148.547-.016.678l-.456.184.045-.402c-1.033.18-1.38-.82-2.207-1.015l.051-.197.605-.114c-.106-.194-.172-.448-.342-.599a29 29 0 0 0-1.665-1.351c-.63-.48-1.277-.942-1.925-1.401-.387-.274-.804-.511-1.18-.797-.401-.307-.767-.653-1.153-.978-.065-.055-.165-.141-.221-.126-.337.095-.415-.017-.354-.316.011-.056-.113-.197-.175-.197-.373-.002-.745.026-1.187.048l-.23-.31c-.014-.161.015-.348-.042-.376-.204-.097-.436-.187-.66-.194-.385-.01-.653-.103-.756-.489-.022-.082-.18-.134-.367-.261l.813-.101-.432.563.875-.181c-.115-.175-.196-.387-.354-.515-.226-.185-.509-.309-.648-.39-.257.134-.423.272-.604.293-.102.012-.331-.176-.325-.263.016-.206.137-.405.243-.68-.367-.294-.855-.682-1.339-1.074q-.787-.638-1.566-1.287c-.239-.2-.454-.496-.718-.016-.022.04-.242-.015-.408-.03.04-.064.088-.14.135-.218.042-.08.145-.2.12-.23a10 10 0 0 0-.748-.829c-.112-.107-.286-.157-.432-.233l-.048.08.49.384c-.405.325-.08.451.151.591.154.094.321.169.482.252-.538-.057-1.094-.04-1.247-.738-.035-.158-.47-.218-.68-.371-.147-.107-.225-.295-.323-.432-.218-.146-.46-.283-.67-.453-.434-.35-.852-.715-1.276-1.076q-1.111-.943-2.216-1.892c-.64-.552-1.274-1.11-1.98-1.727l.756-.274-.395-.438c-.273.377-.582.448-1.06.057.318-.04.543-.067.767-.094l.069-.165c-.198-.13-.382-.318-.6-.367-.115-.026-.292.19-.533.364l-.3-.426.572-.201-.85-.404h.38l.163-.171c-.213-.126-.436-.24-.634-.383-.113-.082-.164-.248-.282-.313-.113-.062-.33-.106-.408-.047-.228.173-.38.182-.56-.049-.078-.098-.225-.145-.33-.227-.515-.404-1.116-.777-.51-1.668l-.752.396c-.495-.36-.591-.883-.752-1.394-.084-.267-.311-.506-.513-.726-.383-.419-.795-.815-1.195-1.221-.27-.275-.47-.661-1.131-.57l.989.725c-.313.221-.542.184-.748-.154-.2-.327-.46-.622-.747-1h.65c-.22-.166-.307-.27-.42-.305-.069-.021-.175.06-.265.096.022-.105.057-.21.06-.314.003-.07-.038-.142-.093-.318l-.35.533c-.538-.15-.658-.767-1.177-1.052-.534-.293-.907-.845-1.353-1.28-.45-.441-.941-.85-1.345-1.325-.371-.438-.967-.736-1.094-1.298-.104-.03-.26-.033-.346-.107-.888-.774-1.76-1.563-2.644-2.34-.646-.567-1.304-1.122-2.007-1.726l.571-.223-.548-.46v.487l-.547-.34.588-.3-.411-.196-.606.395c.066-.387.105-.595.122-.805.001-.009-.199-.032-.305-.05l-.027.442c-.834-.729-1.648-1.43-2.442-2.149-.088-.08-.065-.269-.096-.423l-.72-.196.159-.481c-.253.136-.268.12-.425-.147-.037-.064-.147-.105-.232-.125-.55-.131-.85-.438-.8-.971l-.37-.056v-.603l-.671.03-.95-.73.748-.233-.73-.072-.28-.633-.618.155c.1-.398.265-.789-.34-.9q-.02.155-.045.363L6.807 7.55c.2-.02.264-.04.32-.028.067.014.126.055.279.003-.243-.252-.48-.51-.741-.743-.018-.016-.217.146-.354.241-.11-.112-.333-.234-.364-.389-.184-.928-.98-1.332-1.67-1.859-.816-.624-1.56-1.333-2.345-1.995-.114-.096-.281-.138-.537-.258L.245.938c.537-.388 1.13-.37 1.51.028.712.745 1.571 1.32 2.415 1.919.426.302.766.712 1.189 1.02.356.26.808.408 1.159.674.38.29.67.683 1.04.986.642.523 1.333.994 1.972 1.52.898.74 1.762 1.516 2.651 2.265.438.37.912.701 1.346 1.074.708.607 1.39 1.24 2.097 1.847.273.234.594.418.876.643 1.326 1.05 2.667 2.085 3.963 3.168 1.264 1.056 2.478 2.166 3.717 3.249.88.769 1.794 1.506 2.642 2.305 1.077 1.013 2.09 2.087 3.156 3.11.985.945 2.017 1.847 3.005 2.79.547.523 1.011 1.124 1.572 1.633a142 142 0 0 0 3.458 3.017c1.5 1.276 3.014 2.538 4.527 3.8a194 194 0 0 0 2.708 2.227c1.155.928 2.326 1.839 3.483 2.765.885.708 1.745 1.443 2.642 2.137.886.685 1.808 1.329 2.709 1.997.932.692 1.856 1.394 2.787 2.088q1.373 1.022 2.75 2.036c.716.528 1.425 1.064 2.157 1.572.596.414 1.23.78 1.828 1.191.515.355.989.764 1.506 1.116.576.392 1.172.759 1.776 1.113.78.46 1.583.888 2.366 1.343 1.606.933 3.189 1.901 4.813 2.806 1.614.898 3.262 1.742 4.903 2.597 1.128.587 2.257 1.175 3.408 1.72 1.237.584 2.498 1.124 3.753 1.673.774.338 1.568.64 2.335.992.878.404 1.717.887 2.609 1.262.809.34 1.665.582 2.5.868.996.341 1.992.68 2.986 1.026.84.293 1.662.635 2.517.878.694.197 1.425.272 2.137.412.736.145 1.464.324 2.202.451.624.107 1.255.192 1.887.231.621.04 1.249.034 1.871.002.351-.018.694-.136 1.043-.198.433-.078.901-.016 1.255-.371.203-.204.474-.349.715-.521q.208.157.406.31l.539-.757-.126-.126-.833.587.946-1.489c-.131.02-.217.032-.319.046l.566-.56-.113-.111-.405.267c.077-.25.075-.457.167-.505.289-.15.413-.22.041-.443-.104-.063-.021-.392-.034-.599-.022-.368-.012-.743-.086-1.102-.137-.655-.274-1.318-.505-1.947-.295-.805-.673-1.584-1.032-2.367a51 51 0 0 0-.939-1.936c-.114-.224-.294-.417-.431-.631-.521-.817-1-1.66-1.564-2.45-.817-1.143-1.714-2.236-2.536-3.376-.316-.438-.504-.956-.779-1.422-.1-.168-.32-.275-.419-.443-.148-.253-.556-.447-.276-.837.014-.019-.151-.144-.225-.226a3 3 0 0 1-.249-.302c-.086-.127-.177-.258-.227-.399a9.4 9.4 0 0 0-.813-1.703c-.03-.05.075-.17.117-.26l-.183.03c-.082-.278-.149-.56-.247-.832-.151-.419-.382-.82-.469-1.249-.083-.411-.029-.848-.028-1.273 0-.044.081-.1.068-.129-.353-.801.463-.982.84-1.392.045-.049.152-.113.186-.095.458.24.886.047 1.312-.077.271-.078.635-.126.772-.31.36-.479.875-.474 1.384-.555.146-.023.291-.081.421-.15.215-.113.416-.248.623-.373l.083.12-.491.184.01.076c.682-.03 1.365-.062 2.183-.1l-.261.152 1.176.385c.523.17 1.055.321 1.57.513.901.336 1.793.694 2.686 1.05.098.038.172.127.266.175.891.454 1.797.881 2.671 1.362.656.36 1.252.816 1.907 1.178.514.285 1.086.475 1.614.737.495.246 1.11.433 1.419.822.504.636 1.359.521 1.9.999.207.182.452.33.694.471 1.337.785 2.671 1.575 4.021 2.34.634.359 1.306.662 1.955.999.173.09.319.222.491.314.406.218.824.418 1.232.633.558.295 1.139.562 1.66.907.434.288.889.459 1.388.61.283.086.468.377.841.477.566.15 1.062.524 1.601.776.347.161.726.259 1.078.412.578.251 1.181.473 1.708.802.736.459 1.531.727 2.368.962.57.16 1.075.512 1.633.724a33 33 0 0 0 2.298.774c1.312.391 2.613.866 3.96 1.092 1.218.204 2.422.476 3.644.644.724.1 1.469.069 2.205.071.727.002 1.454-.022 2.181-.048.171-.006.34-.064.58-.112.139.125.326.439.636.056.04-.05.205-.008.311-.015l3.447-.225c.07-.005.139-.021.256-.04-.058-.098-.079-.195-.14-.226-.622-.32-1.229-.68-1.885-.922a3.7 3.7 0 0 1-1.281-.765c-.421-.384-1.055-.557-1.578-.851-.496-.28-.964-.602-1.452-.895-.253-.152-.509-.317-.788-.412-.826-.28-1.6-.617-2.155-1.292-.083-.1-.25-.135-.363-.217-.411-.301-.81-.617-1.225-.914-.814-.581-1.641-1.146-2.452-1.73a140 140 0 0 1-2.644-1.95c-.294-.223-.55-.49-.819-.741-.858-.801-1.707-1.61-2.571-2.406-1-.92-2.038-1.807-3.008-2.754-.583-.568-1.063-1.226-1.603-1.833-.069-.078-.22-.09-.412-.163.228-.084.338-.116.434-.17.012-.007-.053-.125-.072-.194-.083-.295-.163-.591-.185-.928.263.37.572.541 1.02.41l-.209-.777c.743.214 1.174.075 1.34-.382.237.041.481.08.723.126.432.083.538-.319.791-.493.035-.024-.142-.32-.229-.507.195-.044.368-.04.479-.115.619-.423 1.024-.425 1.637.078.524.428 1.009.897 1.531 1.328.323.267.689.488 1.023.745.405.313.781.661 1.199.959s.876.55 1.312.828c.281.179.553.37.833.551.751.487 1.515.956 2.25 1.462.335.23.593.56.928.791.318.22.696.362 1.036.557.481.275.99.525 1.417.864.454.361 1.067.528 1.455.833.622.489 1.339.777 1.986 1.188.541.343 1.139.61 1.724.888 1.227.583 2.454 1.167 3.7 1.715.493.216 1.035.336 1.553.502.086.027.183.05.249.101.848.667 1.937.838 2.92 1.216.755.29 1.603.364 2.381.613 1.343.429 1.333.455 1.856.37-.157.424.278.514 1.66.315l-.347.392 1.688.178-.105.154c.04.029.063.059.092.066.833.19 1.663.389 2.5.561.698.145 1.399.294 2.107.373.613.068 1.206.096 1.822.274.614.177 1.346.003 2.025-.033.157-.008.344-.183.39.115.147-.023.296-.07.442-.064.199.008.395.058.585.138.211.068.474-.357.664.153.032.086.366.116.554.1.519-.041.932.048 1.13.567.206.543-.128.925-.469 1.257-.143.139-.362.162-.29.432.009.035-.237.13-.39.21-.104.597.009.687 1.125.754l-1.083.38c.175.204.524.353.148.659-.072.058.078.33.083.506.005.185-.042.372-.066.559l-.281.108c.081.043.161.087.263.14l-.489.193.615.207c-.01.195-.015.357-.029.518-.008.09-.016.186-.055.266-.07.143-.163.276-.246.413q.072.044.145.087l-.39.156.14.092c-.094.195-.201.387-.279.588-.205.532-.559.824-1.188.952-.24.049-.334-.27-.676-.043-.303.2-.95-.073-1.447-.108-.45-.031-.928-.115-1.351-.015-1.274.302-2.52.695-3.75 1.144-1.377.502-2.799.895-4.203 1.331-1.017.316-2.052.585-3.049.945-1.525.551-3.02 1.174-4.537 1.745-.788.297-1.61.516-2.391.827-.766.304-1.496.689-2.25 1.022a24 24 0 0 1-1.408.56c-.981.363-1.963.722-2.95 1.069-1.498.526-3.003 1.037-4.5 1.566-.335.118-.645.298-.976.429-1.35.533-2.694 1.078-4.057 1.58-2.743 1.013-5.496 2.002-8.246 2.997-.832.301-1.689.55-2.5.895-1.058.45-2.057 1.027-3.127 1.445-.635.248-1.192.6-1.793.89-.041.02-.098.01-.195.02l.135-.6-.493.492.287.233-1.052.398.112-.37c-.147.007-.304-.016-.438.027-.198.064-.379.175-.598.28.349.529-.164.565-.607.79l.552-.672-.096-.063-1.152.509-.046-.086 1.278-.708c-.238.016-.411-.012-.545.043q-1.88.772-3.743 1.58c-.162.07-.274.24-.434.386l-.823-.198c.377-.26.675-.499 1.005-.688.657-.376 1.29-.894 2.008-1.05 1.333-.29 2.307-1.158 3.504-1.644.172-.07.314-.219.45-.35.165-.159.207-.443.607-.267.107.047.488-.344.668-.584.16-.212.236-.295.563-.242.201.032.563-.118.798-.392.177-.207.613-.219.962-.327l-.187-.3c.14-.038.339-.139.383-.097.347.33.617.027.882-.09.535-.235 1.091-.461 1.556-.793.354-.252.728-.362 1.126-.485.134-.04.211-.231.329-.338.056-.05.148-.064.264-.057q.259-.058.518-.114c.151-.032.314-.038.454-.095 1.035-.425 2.08-.832 3.092-1.303a13 13 0 0 0 1.934-1.095c1.483-1.035 3.257-1.54 4.834-2.4.119-.066.296-.04.383-.048.363-.218.695-.465 1.068-.631 1.941-.865 3.893-1.71 5.842-2.56.454-.198.913-.388 1.421-.604-.543-.287-1.011-.309-1.491-.015-.081.05-.216.035-.324.028-1.025-.069-2.053-.116-3.073-.223-.745-.078-1.476-.294-2.221-.341-.673-.043-1.278-.17-1.812-.558-.685.48-1.125-.421-1.759-.283-.074.016-.18-.149-.288-.193-.054-.023-.147.035-.262.168-.598-.392-1.46-.268-1.992-.677-.234-.027-.45-.005-.618-.078-.621-.27-1.257-.528-1.828-.877-.404-.247-.792-.288-1.242-.29-.196 0-.385-.209-.589-.299a17 17 0 0 0-1.221-.501c-.574-.203-1.178-.338-1.734-.575-.391-.166-.705-.484-1.085-.678-.515-.261-1.062-.467-1.592-.702-.094-.041-.214-.09-.255-.166-.136-.256-.274-.44-.632-.293-.078.031-.256-.05-.327-.127-.404-.439-.995-.577-1.478-.862-.557-.33-1.25-.495-1.688-1.002-.231-.268-.621-.287-.916-.467-.404-.247-.281-.347-.141-.591.051-.09.054-.202.106-.417-.483.566-.849.528-1.389.112-.399-.306-.915-.474-1.351-.743-.257-.158-.457-.396-.69-.59a1 1 0 0 0-.289-.169c-.31-.121-.733-.014-.86-.496-.038-.146-.458-.174-.642-.322-.288-.233-.643-.315-.952-.476-.628-.328-1.163-.81-1.764-1.188-.299-.19-.655-.301-.992-.432-.353-.136-.621-.274-.845-.642-.21-.346-.788-.487-1.186-.743-.524-.337-1.242-.392-1.604-.958-.042-.065.01-.182.008-.166-.275-.113-.538-.189-.764-.32a319 319 0 0 1-3.78-2.247 92 92 0 0 1-2.499-1.564c-.156-.101-.226-.311-.373-.43a10 10 0 0 0-.981-.712c-.067-.041-.279.112-.339.07-.435-.31-.849-.647-1.269-.977-.009-.007-.001-.034-.001.091l-1.123-.44-.324-.13c-.027.134-.118.296-.068.395.272.538.555 1.073.881 1.583.293.46.657.879.973 1.326.773 1.089 1.556 2.172 2.294 3.281.365.548.627 1.157.965 1.722.143.238.398.417.54.655.415.694.844 1.385 1.18 2.113.3.648.352 1.424.754 1.996.466.663.447 1.396.662 2.087.345 1.103.608 2.253.53 3.402-.058.837-.371 1.664-.609 2.486-.272.94-.586 1.868-.885 2.8-.455 1.42-1.366 2.463-2.854 3.027-.595.226-1.175.518-1.793.653-.667.147-1.37.145-2.058.208l-.036-.141-.26.293-.046-.147c-.288.047-.576.1-.865.138a.5.5 0 0 1-.243-.04c-.058-.024-.1-.126-.145-.124-.633.036-1.264.109-1.873-.151-.127-.055-.292-.033-.44-.046l.029-.26c.259.032.518.08.778.092.547.024 1.095.045 1.641.035.453-.007.904-.08 1.357-.091a9.5 9.5 0 0 0 3.432-.741c.771-.32 1.503-.707 1.935-1.432-.639.247-1.29.448-1.89.74-.925.45-1.953.564-2.93.646-1.301.108-2.631-.074-3.947-.153-.59-.035-1.174-.15-1.764-.172-.186-.007-.379.168-.626.148l.351-.127c-.3-.095-.55-.198-.811-.246-.105-.02-.259.056-.343.135-.036.034.034.19.084.276.079.14.163.282.277.395.362.36.68-.013 1.018-.082-.038.638.549.306.815.468.139.086.335.09.505.132l-.036.225-2.743-.18.514-.24c-.184-.01-.275-.036-.351-.016-.88.24-1.69-.084-2.501-.293a42 42 0 0 1-3.341-.995c-.971-.34-1.895-.795-2.851-1.172-.773-.305-1.571-.553-2.344-.858-.804-.318-1.591-.674-2.386-1.014-.182-.078-.364-.157-.41-.296-.617-.265-1.271-.476-1.838-.814-.337-.202-.64-.39-1.037-.486-.397-.094-.769-.296-1.14-.47-.587-.277-1.162-.573-1.744-.857-.553-.27-1.111-.53-1.66-.807-.052-.026-.053-.145-.078-.22l1.75-.336c-.595-.246-1.05-.406-1.476-.619-.487-.243-.947-.535-1.421-.803-.09-.051-.19-.087-.286-.13-.071-.045-.14-.094-.215-.135-.4-.216-.815-.526-1.092.136-.013.031-.05.053-.176.18l.629-.196c.069.516.455.252.76.222-.138.283-.557.666.258.602.083-.007.176.15.271.224s.25.22.288.198c.52-.303.713.42 1.166.373l-.46.044zm60.262 15.088c.267-.096.554-.163.792-.302.116-.068.142-.272.209-.414.167.22.383.177.602.096.56-.209 1.125-.407 1.676-.634.48-.2.944-.433 1.415-.652l-.063-.13q-1.81.664-3.615 1.334l-1.206.498.19.207c-.546-.126-1.063.06-1.4.55zm-54.49-13.294c-.21.325.038.474.292.553.193.06.422.018.634.02l-.094.355.643.247.153-.294c.1.767.6.39.951.404-.197-.13-.557-.131-.615-.256-.21-.454-.627-.412-1.007-.484-.158-.114-.308-.24-.477-.336-.15-.086-.323-.138-.486-.206l-1.144-.63-.282.443 1.188.51c.08-.106.164-.217.244-.326m-3.369-1.698c-.337-.522-.782.047-1.178-.068.133.133.288.229.45.242.19.015.386-.042.58-.067.454.254.082.572.016.933l.48-.299c-.001.66.436.002.609.2-.106.26-.193.472.279.308.16-.056.38.041.545.065l.114-.544-.161-.057c-.521-.176-1.254.037-1.475-.704-.007-.024-.17-.006-.259-.008m81.229 2.957c0-.113-.006-.217.006-.32.003-.02.084-.05.123-.044.433.074.433.076.283-.42h-.534l.435-.402c-.187-.05-.372-.122-.563-.145a1.9 1.9 0 0 0-.602.007c-.184.038-.351.149-.585.254-.259-.201-.584-.328-.824.187l-.039-.426-.472.725.956-.074c.564.483-.414.564-.391 1.03.419-.236.785-.44 1.238-.696-.068.141-.082.186-.109.222-.02.027-.055.043-.134.1zm-24.938 13.149.095.119q.46-.176.922-.349c1.95-.723 3.902-1.442 5.849-2.174.129-.048.22-.184.328-.28-.237.012-.393.117-.567.166-.541.154-1.105.249-1.631.436a153 153 0 0 0-4.216 1.577c-.285.111-.521.334-.78.505m-30.019-9.176c1.872-.394 3.763-.734 4.924-2.387-1.373 1.296-3.161 1.829-4.924 2.387m-13.212-1.21c-.125-.161-.198-.353-.333-.406-.18-.071-.41-.049-.616-.04-.135.006-.267.06-.4.091l.015.124.543.073.082.364.623.213c.057-.06.161-.209.19-.197.245.102.48.228.712.356.148.082.277.204.434.264.235.09.487.143.805.23v-.454l-.1.127c-.297-.119-.638-.185-.88-.367-.357-.27-.643-.621-1.075-.379m66.667 1.25c.35.34 1.155.035 1.795-.67-.745-.087-1.286.243-1.795.67m-27.903 11.147.104.136 1.815-.86-.124-.214zm10.619-17.455.086-.239-1.349-.383-.055.164c.243.064.491.116.728.197.204.07.394.172.59.26m2.656.599c.076.378.336.447 1.098.354l.032-.145zm-47.53 6.27-.044-.392c.126.005.256.03.377.01.134-.021.26-.085.495-.167-.778-.255-1.056-.095-1.156.548zm-22.544-10.14c-.18-.071-.355-.152-.538-.212-.22-.073-.447-.128-.72-.205.184.408.792.578 1.257.417"></path></svg></div><div class="_636JDg"><span class="jqn1OA aZskFA T5LNnw _12jHbA">Was this page useful?</span><button class="_5KtATA LQzFZw VgvqkQ _8ERLTg rV61VQ LQzFZw VgvqkQ _4_iekA j34Zww aqbYPg _3FvZZg _97Sy3w" type="button"><span class="khPe7Q">Yes</span></button><button class="_5KtATA LQzFZw VgvqkQ _8ERLTg rV61VQ LQzFZw VgvqkQ _4_iekA j34Zww aqbYPg _3FvZZg _97Sy3w" type="button"><span class="khPe7Q">No</span></button></div></div></div><hr/><div class="Hxa48g"><div class="reeHdw BMOCzQ _6Mu4Ow _WIyVQ LuBWVA" style="--s_rwAw:flex"><div class="J_e6hA"><div><div id="_R_3frd6_"><div class="FJA3UA"><button id="_R_frd6_" class="_5KtATA LQzFZw VgvqkQ _8ERLTg h69Neg Z3nT2A LQzFZw VgvqkQ _4_iekA j34Zww aqbYPg _3FvZZg h5mTDw" type="button" aria-label="Region: Global" aria-expanded="false" aria-haspopup="menu" role="button"><span class="vxQy1w"><span aria-hidden="true" class="NA_Img dkWypw"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M2 12c0 5.523 4.477 10 10 10s10-4.477 10-10c0-1.288-.244-2.52-.687-3.65v-.1h-.04A10.003 10.003 0 0 0 12 2C6.477 2 2 6.477 2 12Zm12.653-8.078A8.526 8.526 0 0 1 19.63 8.25h-3.457c-.317-1.74-.848-3.236-1.52-4.328ZM20.2 9.75h-3.813c.075.723.114 1.476.114 2.25s-.04 1.527-.114 2.25h3.813A8.51 8.51 0 0 0 20.5 12a8.51 8.51 0 0 0-.301-2.25Zm-.569 6h-3.457c-.317 1.74-.848 3.236-1.52 4.328a8.526 8.526 0 0 0 4.977-4.328Zm-4.755-1.5a20.109 20.109 0 0 0 0-4.5h-5.75a20.116 20.116 0 0 0 0 4.5h5.75Zm-5.519 1.5h5.288C14.08 18.593 12.953 20.5 12 20.5c-.953 0-2.081-1.907-2.644-4.75Zm-1.529 0c.317 1.74.848 3.236 1.52 4.328A8.526 8.526 0 0 1 4.37 15.75h3.457Zm-.213-1.5H3.801A8.51 8.51 0 0 1 3.5 12c0-.779.105-1.533.301-2.25h3.813A21.9 21.9 0 0 0 7.5 12c0 .774.04 1.527.114 2.25ZM12 3.5c.953 0 2.081 1.907 2.644 4.75H9.356C9.92 5.407 11.047 3.5 12 3.5ZM4.37 8.25h3.457c.317-1.74.848-3.236 1.52-4.328A8.525 8.525 0 0 0 4.37 8.25Z" fill="currentColor"/></svg></span></span></button></div></div><div id="_R_5frd6_" style="display:none"><div class="FJA3UA"><div class="FJA3UA"><button id="_R_frd6_" class="_5KtATA LQzFZw VgvqkQ _8ERLTg h69Neg Z3nT2A LQzFZw VgvqkQ _4_iekA j34Zww aqbYPg _3FvZZg h5mTDw" type="button" aria-label="Region: Global" aria-expanded="false" aria-haspopup="menu" role="button"><span class="vxQy1w"><span aria-hidden="true" class="NA_Img dkWypw"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M2 12c0 5.523 4.477 10 10 10s10-4.477 10-10c0-1.288-.244-2.52-.687-3.65v-.1h-.04A10.003 10.003 0 0 0 12 2C6.477 2 2 6.477 2 12Zm12.653-8.078A8.526 8.526 0 0 1 19.63 8.25h-3.457c-.317-1.74-.848-3.236-1.52-4.328ZM20.2 9.75h-3.813c.075.723.114 1.476.114 2.25s-.04 1.527-.114 2.25h3.813A8.51 8.51 0 0 0 20.5 12a8.51 8.51 0 0 0-.301-2.25Zm-.569 6h-3.457c-.317 1.74-.848 3.236-1.52 4.328a8.526 8.526 0 0 0 4.977-4.328Zm-4.755-1.5a20.109 20.109 0 0 0 0-4.5h-5.75a20.116 20.116 0 0 0 0 4.5h5.75Zm-5.519 1.5h5.288C14.08 18.593 12.953 20.5 12 20.5c-.953 0-2.081-1.907-2.644-4.75Zm-1.529 0c.317 1.74.848 3.236 1.52 4.328A8.526 8.526 0 0 1 4.37 15.75h3.457Zm-.213-1.5H3.801A8.51 8.51 0 0 1 3.5 12c0-.779.105-1.533.301-2.25h3.813A21.9 21.9 0 0 0 7.5 12c0 .774.04 1.527.114 2.25ZM12 3.5c.953 0 2.081 1.907 2.644 4.75H9.356C9.92 5.407 11.047 3.5 12 3.5ZM4.37 8.25h3.457c.317-1.74.848-3.236 1.52-4.328A8.525 8.525 0 0 0 4.37 8.25Z" fill="currentColor"/></svg></span></span></button></div></div></div></div></div></div><div class="EUqtWA BMOCzQ _6Mu4Ow LuBWVA" style="--s_rwAw:flex"><div class="jv_R6g" style="--NZu1Zw:4px;--okeDpw:center"><div class="aWBg0w B8t6MQ T5LNnw yhSaJw">© <!-- -->2025<!-- --> All Rights Reserved. Canva®</div><div class="aWBg0w B8t6MQ T5LNnw"><div class="B186Jw"><a href="https://www.canva.com/policies/privacy-policy/" target="_blank" rel="noreferrer nofollow">Privacy policy</a><span class="ctN5hw"></span><a href="https://www.canva.com/policies/" target="_blank" rel="noreferrer nofollow">Terms</a></div></div></div></div><div class="j5eTBg BMOCzQ _6Mu4Ow YgHDng LuBWVA" style="--s_rwAw:flex"><div class="Dlz76g"><a class="w0weUA" target="_blank" href="https://www.facebook.com/canva" rel="noreferrer" aria-label="Facebook"><span aria-hidden="true" class="NA_Img dkWypw eJ5bfQ"><svg fill="none" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M21.5 12.058c0-5.28-4.253-9.558-9.5-9.558s-9.5 4.279-9.5 9.558c0 4.771 3.473 8.725 8.016 9.442v-6.68H8.104v-2.762h2.412V9.952c0-2.395 1.417-3.718 3.588-3.718 1.04 0 2.126.186 2.126.186v2.352h-1.198c-1.18 0-1.548.738-1.548 1.494v1.792h2.635l-.421 2.763h-2.214V21.5c4.543-.717 8.016-4.67 8.016-9.442z" fill="currentColor"/></svg></span></a><a class="w0weUA" target="_blank" href="https://x.com/canva" rel="noreferrer" aria-label="Twitter"><span aria-hidden="true" class="NA_Img dkWypw nAap8A"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.713 10.622 20.413 3h-1.588l-5.818 6.618L8.36 3H3l7.027 10.007L3 21h1.588l6.144-6.989L15.64 21H21l-7.287-10.378Zm-2.175 2.474-.713-.997L5.16 4.17H7.6l4.571 6.4.712.996 5.943 8.319h-2.439l-4.85-6.788Z" fill="currentColor"/></svg></span></a><a class="w0weUA" target="_blank" href="https://www.pinterest.com/canva" rel="noreferrer" aria-label="Pinterest"><span aria-hidden="true" class="NA_Img dkWypw _6X8ASw"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><path fill="currentColor" fill-rule="evenodd" d="M16 2.67a13.33 13.33 0 0 0-4.86 25.75c-.12-1.06-.22-2.68.05-3.83l1.56-6.63s-.4-.8-.4-1.98c0-1.85 1.08-3.23 2.41-3.23 1.14 0 1.7.85 1.7 1.87 0 1.15-.74 2.86-1.11 4.44-.32 1.33.66 2.41 1.97 2.41 2.37 0 4.2-2.5 4.2-6.1 0-3.2-2.3-5.43-5.58-5.43a5.77 5.77 0 0 0-6.02 5.79c0 1.14.44 2.37 1 3.04.1.13.12.25.09.38l-.37 1.52c-.06.24-.2.3-.45.17-1.66-.77-2.7-3.2-2.7-5.16 0-4.2 3.05-8.07 8.8-8.07 4.63 0 8.22 3.3 8.22 7.7 0 4.6-2.9 8.3-6.91 8.3-1.36 0-2.63-.7-3.06-1.54l-.83 3.17a14.9 14.9 0 0 1-1.66 3.5A13.33 13.33 0 1 0 16 2.67"/></svg></span></a><a class="w0weUA" target="_blank" href="https://instagram.com/canva" rel="noreferrer" aria-label="Instagram"><span aria-hidden="true" class="NA_Img dkWypw"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><linearGradient id="_2895616067__a" y1="100%"><stop offset="0%" stop-color="#ffd520"/><stop offset="49%" stop-color="#f50000"/><stop offset="100%" stop-color="#b900b4"/></linearGradient><path fill="url(#_2895616067__a)" d="M12 3c-2.44 0-2.75.01-3.71.05-.96.05-1.61.2-2.19.42a4.4 4.4 0 0 0-1.59 1.04c-.5.5-.8 1-1.04 1.6a6.6 6.6 0 0 0-.42 2.18C3.01 9.25 3 9.56 3 12s.01 2.75.05 3.71c.05.96.2 1.61.42 2.19.23.59.54 1.09 1.04 1.59s1 .8 1.6 1.04a6.6 6.6 0 0 0 2.18.42c.96.04 1.27.05 3.71.05s2.75-.01 3.71-.05c.96-.05 1.61-.2 2.19-.42a4.4 4.4 0 0 0 1.59-1.04c.5-.5.8-1 1.04-1.6a6.6 6.6 0 0 0 .42-2.18c.04-.96.05-1.27.05-3.71s-.01-2.75-.05-3.71a6.62 6.62 0 0 0-.42-2.19 4.4 4.4 0 0 0-1.04-1.59c-.5-.5-1-.8-1.6-1.04a6.6 6.6 0 0 0-2.18-.42C14.75 3.01 14.44 3 12 3zm0 1.62c2.4 0 2.69.01 3.64.05.87.04 1.35.2 1.67.31.42.17.72.36 1.03.68.32.31.51.61.68 1.03.12.32.27.8.3 1.67.05.95.06 1.24.06 3.64 0 2.4-.01 2.69-.06 3.64-.04.87-.19 1.35-.31 1.67-.17.42-.36.72-.68 1.03-.31.32-.62.51-1.03.68-.32.12-.8.27-1.68.3-.95.05-1.24.06-3.64.06-2.41 0-2.7-.01-3.65-.06a5.12 5.12 0 0 1-1.67-.31 2.8 2.8 0 0 1-1.04-.68 2.75 2.75 0 0 1-.67-1.03c-.13-.32-.27-.8-.32-1.68-.03-.94-.04-1.24-.04-3.63 0-2.4 0-2.7.04-3.65.05-.87.2-1.36.32-1.67.15-.43.36-.72.67-1.04a2.67 2.67 0 0 1 1.04-.67c.31-.13.78-.27 1.66-.32.96-.03 1.24-.04 3.65-.04l.03.02zm0 2.76a4.62 4.62 0 1 0 0 9.24 4.62 4.62 0 0 0 0-9.24zM12 15a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm5.88-7.8a1.08 1.08 0 1 1-2.16 0 1.08 1.08 0 0 1 2.16 0z"/></svg></span></a></div></div></div></footer></div></div></div><script id="__NEXT_DATA__" type="application/json" nonce="MTUyNTQ4NjIsMjkwOTc5MTYw">{"props":{"pageProps":{}},"page":"/docs/connect/authentication","query":{},"buildId":"423743adabfc0c1882dab30d071fb828da56a44a","nextExport":true,"autoExport":true,"isFallback":false,"dynamicIds":[22678],"scriptLoader":[]}</script></body></html>