[{"data":1,"prerenderedAt":2342},["ShallowReactive",2],{"docs-pages-meta":3,"i-lucide:menu":159,"i-fa6-solid:book":164,"i-fa6-solid:signs-post":168,"i-lucide:search":170,"i-lucide:languages":172,"i-lucide:chevron-down":174,"i-lucide:moon":176,"i-fa6-solid:rocket":178,"i-lucide:sparkles":180,"i-lucide:badge-check":182,"i-lucide:star":184,"i-fa6-solid:qrcode":186,"i-fa6-solid:cube":188,"i-lucide:bot":190,"i-lucide:webhook":192,"i-fa6-brands:wordpress":194,"i-fa6-solid:envelope":196,"i-fa6-solid:code":198,"i-fa6-solid:key":201,"i-lucide:shield":203,"docs-page:\u002Fen\u002Foauth":205,"i-lucide:chevron-left":2329,"i-fa6-solid:circle-exclamation":2331,"i-fa6-solid:triangle-exclamation":2333,"i-lucide:copy":2335,"i-fa6-solid:circle-info":2337,"i-fa6-solid:lightbulb":2339},[4,9,14,19,22,27,30,35,38,42,47,52,56,61,66,71,76,81,86,89,93,97,100,103,107,110,114,117,121,125,129,133,137,141,144,148,152,156],{"path":5,"title":6,"description":7,"icon":8},"\u002Fen\u002Fapi-reference\u002Fv2\u002Fauthentication","Authentication","Learn how to generate and manage your access credentials to use the API securely.","key",{"path":10,"title":11,"description":12,"icon":13},"\u002Fen\u002Fapi-reference\u002Fv2","Introduction","The v2 API: connections, chats, messages and templates.","sparkles",{"path":15,"title":16,"description":17,"icon":18},"\u002Fen\u002Fapi-reference\u002Fv2\u002Fwebhooks","Webhooks","In this section, you’ll learn how to integrate and use webhooks and messaging events to connect your application to your projects.","webhook",{"path":20,"title":6,"description":21,"icon":8},"\u002Fen\u002Fapi-reference\u002Fv3\u002Fauthentication","How a v3 request proves who it is, and which workspace it acts on.",{"path":23,"title":24,"description":25,"icon":26},"\u002Fen\u002Fapi-reference\u002Fv3\u002Fconventions","Conventions","Pagination, errors, ids and dates — the rules every v3 endpoint follows.","list-check",{"path":28,"title":11,"description":29,"icon":13},"\u002Fen\u002Fapi-reference\u002Fv3","The v3 API: workspaces, connections, campaigns and the helpdesk.",{"path":31,"title":32,"description":33,"icon":34},"\u002Fen\u002Fapi-reference\u002Fv3\u002Frealtime","Realtime","The websocket behind the shared inbox: live conversations, typing and presence.","tower-broadcast",{"path":36,"title":16,"description":37,"icon":18},"\u002Fen\u002Fapi-reference\u002Fv3\u002Fwebhooks","Receive WhatsApp and helpdesk events on your own server, and prove they came from us.",{"path":39,"title":40,"description":41,"icon":8},"\u002Fen\u002Fapikeys","API Keys","Understand what API Keys are and why they are required to use Pingo Notify securely.",{"path":43,"title":44,"description":45,"icon":46},"\u002Fen\u002Fconnections","Connections","Connections represent WhatsApp sessions linked to Pingo Notify, used for sending, receiving, and integrations.","qrcode",{"path":48,"title":49,"description":50,"icon":51},"\u002Fen\u002Fhooks-and-development","Hooks and Development","Extend the Pingo Notify WordPress plugin with custom triggers, groups, and hooks.","code",{"path":53,"title":54,"description":55,"icon":13},"\u002Fen","Introduction to Pingo Notify","Connect WhatsApp to your systems, automate workflows, and send messages.",{"path":57,"title":58,"description":59,"icon":60},"\u002Fen\u002Fintegrations","Integrations","Integrations represent external applications linked to Pingo Notify, authorized to access resources such as connections, plans, and messaging.","cube",{"path":62,"title":63,"description":64,"icon":65},"\u002Fen\u002Fmcp","MCP server","Connect an AI assistant to your workspace — how to authorize it, what it can do, and every tool it gets.","robot",{"path":67,"title":68,"description":69,"icon":70},"\u002Fen\u002Foauth","OAuth 2.1","How an application gets a token on behalf of a person, what that token can do, and every error it can get back.","shield",{"path":72,"title":73,"description":74,"icon":75},"\u002Fen\u002Fofficial-whatsapp-api","Official WhatsApp API","Step-by-step guide to request access to the Official WhatsApp Business API and connect it to Pingo Notify.","badge-check",{"path":77,"title":78,"description":79,"icon":80},"\u002Fen\u002Fplugin-wordpress","Get started","WordPress plugin that connects events from your site to Pingo Notify for automatic notification delivery.","wordpress",{"path":82,"title":83,"description":84,"icon":85},"\u002Fen\u002Ftemplate-plugins","Templates Guide","Learn how to create custom dynamic messages.","square-envelope",{"path":87,"title":16,"description":88,"icon":18},"\u002Fen\u002Fwebhooks","Receive WhatsApp events in real time by linking webhooks to one or more connections in Pingo Notify.",{"path":90,"title":91,"description":92,"icon":8},"\u002Fpt-BR\u002Fapi-reference\u002Fv2\u002Fauthentication","Autenticação","Veja como gerar e gerenciar suas credenciais de acesso para utilizar a API com segurança.",{"path":94,"title":95,"description":96,"icon":13},"\u002Fpt-BR\u002Fapi-reference\u002Fv2","Introdução","A API v2: conexões, conversas, mensagens e templates.",{"path":98,"title":16,"description":99,"icon":18},"\u002Fpt-BR\u002Fapi-reference\u002Fv2\u002Fwebhooks","Nesta seção, você aprende como integrar e utilizar webhooks e eventos de mensageria para conectar a aplicação aos seus projetos.",{"path":101,"title":91,"description":102,"icon":8},"\u002Fpt-BR\u002Fapi-reference\u002Fv3\u002Fauthentication","Como uma requisição v3 prova quem é, e em qual workspace ela atua.",{"path":104,"title":105,"description":106,"icon":26},"\u002Fpt-BR\u002Fapi-reference\u002Fv3\u002Fconventions","Convenções","Paginação, erros, ids e datas — as regras que todo endpoint da v3 segue.",{"path":108,"title":95,"description":109,"icon":13},"\u002Fpt-BR\u002Fapi-reference\u002Fv3","A API v3: workspaces, conexões, campanhas e o helpdesk.",{"path":111,"title":112,"description":113,"icon":34},"\u002Fpt-BR\u002Fapi-reference\u002Fv3\u002Frealtime","Tempo real","O websocket por trás da caixa compartilhada: conversas ao vivo, digitação e presença.",{"path":115,"title":16,"description":116,"icon":18},"\u002Fpt-BR\u002Fapi-reference\u002Fv3\u002Fwebhooks","Receba eventos do WhatsApp e do helpdesk no seu servidor, e prove que vieram de nós.",{"path":118,"title":119,"description":120,"icon":8},"\u002Fpt-BR\u002Fapikeys","Chaves de API","Entenda o que são Chaves de API e por que elas são necessárias para usar o Pingo Notify com segurança.",{"path":122,"title":123,"description":124,"icon":46},"\u002Fpt-BR\u002Fconnections","Conexões","Conexões representam sessões do WhatsApp vinculadas ao Pingo Notify, usadas para envio, recebimento e integrações.",{"path":126,"title":127,"description":128,"icon":51},"\u002Fpt-BR\u002Fhooks-and-development","Hooks e Desenvolvimento","Estenda o plugin WordPress do Pingo Notify com gatilhos, grupos e hooks personalizados.",{"path":130,"title":131,"description":132,"icon":13},"\u002Fpt-BR","Introdução ao Pingo Notify","Conecte o WhatsApp aos seus sistemas, automatize fluxos e envie mensagens.",{"path":134,"title":135,"description":136,"icon":60},"\u002Fpt-BR\u002Fintegrations","Integrações","Integrações representam aplicações externas vinculadas ao Pingo Notify, autorizadas a acessar recursos como conexões, planos e mensageria.",{"path":138,"title":139,"description":140,"icon":65},"\u002Fpt-BR\u002Fmcp","Servidor MCP","Conecte um assistente de IA ao seu workspace — como autorizar, o que ele pode fazer e todas as ferramentas que recebe.",{"path":142,"title":68,"description":143,"icon":70},"\u002Fpt-BR\u002Foauth","Como uma aplicação obtém um token em nome de uma pessoa, o que esse token pode fazer e todos os erros que ele pode receber.",{"path":145,"title":146,"description":147,"icon":75},"\u002Fpt-BR\u002Fofficial-whatsapp-api","API Oficial do WhatsApp","Guia passo a passo para solicitar acesso à API Oficial do WhatsApp Business e conectá-la ao Pingo Notify.",{"path":149,"title":150,"description":151,"icon":80},"\u002Fpt-BR\u002Fplugin-wordpress","Primeiros passos","Plugin WordPress que conecta eventos do seu site ao Pingo Notify para envio automático de notificações.",{"path":153,"title":154,"description":155,"icon":85},"\u002Fpt-BR\u002Ftemplate-plugins","Guia de Templates","Aprenda a criar mensagens dinâmicas personalizadas.",{"path":157,"title":16,"description":158,"icon":18},"\u002Fpt-BR\u002Fwebhooks","Receba eventos do WhatsApp em tempo real vinculando webhooks a uma ou mais conexões no Pingo Notify.",{"left":160,"top":160,"width":161,"height":161,"rotate":160,"vFlip":162,"hFlip":162,"body":163},0,24,false,"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 5h16M4 12h16M4 19h16\"\u002F>",{"left":160,"top":160,"width":165,"height":166,"rotate":160,"vFlip":162,"hFlip":162,"body":167},448,512,"\u003Cpath fill=\"currentColor\" d=\"M96 0C43 0 0 43 0 96v320c0 53 43 96 96 96h320c17.7 0 32-14.3 32-32s-14.3-32-32-32v-64c17.7 0 32-14.3 32-32V32c0-17.7-14.3-32-32-32zm0 384h256v64H96c-17.7 0-32-14.3-32-32s14.3-32 32-32m32-240c0-8.8 7.2-16 16-16h192c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16m16 48h192c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16s7.2-16 16-16\"\u002F>",{"left":160,"top":160,"width":166,"height":166,"rotate":160,"vFlip":162,"hFlip":162,"body":169},"\u003Cpath fill=\"currentColor\" d=\"M224 32H64c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32h377.4c4.2 0 8.3-1.7 11.3-4.7l48-48c6.2-6.2 6.2-16.4 0-22.6l-48-48c-3-3-7.1-4.7-11.3-4.7H288c0-17.7-14.3-32-32-32s-32 14.3-32 32m256 224c0-17.7-14.3-32-32-32H288v-32h-64v32H70.6c-4.2 0-8.3 1.7-11.3 4.7l-48 48c-6.2 6.2-6.2 16.4 0 22.6l48 48c3 3 7.1 4.7 11.3 4.7H448c17.7 0 32-14.3 32-32zM288 480v-96h-64v96c0 17.7 14.3 32 32 32s32-14.3 32-32\"\u002F>",{"left":160,"top":160,"width":161,"height":161,"rotate":160,"vFlip":162,"hFlip":162,"body":171},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"m21 21l-4.34-4.34\"\u002F>\u003Ccircle cx=\"11\" cy=\"11\" r=\"8\"\u002F>\u003C\u002Fg>",{"left":160,"top":160,"width":161,"height":161,"rotate":160,"vFlip":162,"hFlip":162,"body":173},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m5 8l6 6m-7 0l6-6l2-3M2 5h12M7 2h1m14 20l-5-10l-5 10m2-4h6\"\u002F>",{"left":160,"top":160,"width":161,"height":161,"rotate":160,"vFlip":162,"hFlip":162,"body":175},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m6 9l6 6l6-6\"\u002F>",{"left":160,"top":160,"width":161,"height":161,"rotate":160,"vFlip":162,"hFlip":162,"body":177},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"\u002F>",{"left":160,"top":160,"width":166,"height":166,"rotate":160,"vFlip":162,"hFlip":162,"body":179},"\u003Cpath fill=\"currentColor\" d=\"M156.6 384.9L125.7 354c-8.5-8.5-11.5-20.8-7.7-32.2c3-8.9 7-20.5 11.8-33.8H24c-8.6 0-16.6-4.6-20.9-12.1s-4.2-16.7.2-24.1l52.5-88.5c13-21.9 36.5-35.3 61.9-35.3H200c2.4-4 4.8-7.7 7.2-11.3C289.1-4.1 411.1-8.1 483.9 5.3c11.6 2.1 20.6 11.2 22.8 22.8c13.4 72.9 9.3 194.8-111.4 276.7c-3.5 2.4-7.3 4.8-11.3 7.2v82.3c0 25.4-13.4 49-35.3 61.9l-88.5 52.5c-7.4 4.4-16.6 4.5-24.1.2S224 496.7 224 488V380.8c-14.1 4.9-26.4 8.9-35.7 11.9c-11.2 3.6-23.4.5-31.8-7.8zM384 168a40 40 0 1 0 0-80a40 40 0 1 0 0 80\"\u002F>",{"left":160,"top":160,"width":161,"height":161,"rotate":160,"vFlip":162,"hFlip":162,"body":181},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594zM20 2v4m2-2h-4\"\u002F>\u003Ccircle cx=\"4\" cy=\"20\" r=\"2\"\u002F>\u003C\u002Fg>",{"left":160,"top":160,"width":161,"height":161,"rotate":160,"vFlip":162,"hFlip":162,"body":183},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M3.85 8.62a4 4 0 0 1 4.78-4.77a4 4 0 0 1 6.74 0a4 4 0 0 1 4.78 4.78a4 4 0 0 1 0 6.74a4 4 0 0 1-4.77 4.78a4 4 0 0 1-6.75 0a4 4 0 0 1-4.78-4.77a4 4 0 0 1 0-6.76\"\u002F>\u003Cpath d=\"m9 12l2 2l4-4\"\u002F>\u003C\u002Fg>",{"left":160,"top":160,"width":161,"height":161,"rotate":160,"vFlip":162,"hFlip":162,"body":185},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.12 2.12 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.12 2.12 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.12 2.12 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.12 2.12 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.12 2.12 0 0 0 1.597-1.16z\"\u002F>",{"left":160,"top":160,"width":165,"height":166,"rotate":160,"vFlip":162,"hFlip":162,"body":187},"\u003Cpath fill=\"currentColor\" d=\"M0 80c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48zm64 16v64h64V96zM0 336c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48zm64 16v64h64v-64zM304 32h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48h-96c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48m80 64h-64v64h64zM256 304c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16s7.2 16 16 16h32c8.8 0 16-7.2 16-16s7.2-16 16-16s16 7.2 16 16v96c0 8.8-7.2 16-16 16h-64c-8.8 0-16-7.2-16-16s-7.2-16-16-16s-16 7.2-16 16v64c0 8.8-7.2 16-16 16h-32c-8.8 0-16-7.2-16-16zm112 176a16 16 0 1 1 0-32a16 16 0 1 1 0 32m64 0a16 16 0 1 1 0-32a16 16 0 1 1 0 32\"\u002F>",{"left":160,"top":160,"width":166,"height":166,"rotate":160,"vFlip":162,"hFlip":162,"body":189},"\u003Cpath fill=\"currentColor\" d=\"M234.5 5.7c13.9-5 29.1-5 43.1 0l192 68.6c25.4 9.1 42.4 33.2 42.4 60.3v242.9c0 27-17 51.2-42.5 60.3l-192 68.6c-13.9 5-29.1 5-43.1 0l-192-68.6C17 428.6 0 404.5 0 377.4V134.6c0-27 17-51.2 42.5-60.3zM256 66L82.3 128L256 190l173.7-62zm32 368.6l160-57.1v-188l-160 57.1z\"\u002F>",{"left":160,"top":160,"width":161,"height":161,"rotate":160,"vFlip":162,"hFlip":162,"body":191},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M12 8V4H8\"\u002F>\u003Crect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M2 14h2m16 0h2m-7-1v2m-6-2v2\"\u002F>\u003C\u002Fg>",{"left":160,"top":160,"width":161,"height":161,"rotate":160,"vFlip":162,"hFlip":162,"body":193},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2\"\u002F>\u003Cpath d=\"m6 17l3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06\"\u002F>\u003Cpath d=\"m12 6l3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8\"\u002F>\u003C\u002Fg>",{"left":160,"top":160,"width":166,"height":166,"rotate":160,"vFlip":162,"hFlip":162,"body":195},"\u003Cpath fill=\"currentColor\" d=\"m61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6m337.9 75.9c0-26.3-9.4-44.5-17.5-58.7c-10.8-17.5-20.9-32.4-20.9-49.9c0-19.6 14.8-37.8 35.7-37.8c.9 0 1.8.1 2.8.2c-37.9-34.7-88.3-55.9-143.7-55.9c-74.3 0-139.7 38.1-177.8 95.9c5 .2 9.7.3 13.7.3c22.2 0 56.7-2.7 56.7-2.7c11.5-.7 12.8 16.2 1.4 17.5c0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2c-11.5-.7-10.1-18.2 1.3-17.5c0 0 35.1 2.7 56 2.7c22.2 0 56.7-2.7 56.7-2.7c11.5-.7 12.8 16.2 1.4 17.5c0 0-11.5 1.3-24.3 2l76.9 228.7l21.2-70.9c9-29.4 16-50.5 16-68.7m-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7c24.8 0 48.5-4.3 70.6-12.1c-.6-.9-1.1-1.9-1.5-2.9zm183-120.7c.9 6.8 1.4 14 1.4 21.9c0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1M504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256C8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248m-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6\"\u002F>",{"left":160,"top":160,"width":166,"height":166,"rotate":160,"vFlip":162,"hFlip":162,"body":197},"\u003Cpath fill=\"currentColor\" d=\"M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4l217.6 163.2c11.4 8.5 27 8.5 38.4 0l217.6-163.2c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48zM0 176v208c0 35.3 28.7 64 64 64h384c35.3 0 64-28.7 64-64V176L294.4 339.2a63.9 63.9 0 0 1-76.8 0z\"\u002F>",{"left":160,"top":160,"width":199,"height":166,"rotate":160,"vFlip":162,"hFlip":162,"body":200},640,"\u003Cpath fill=\"currentColor\" d=\"M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6m80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3l89.3 89.4l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3\"\u002F>",{"left":160,"top":160,"width":166,"height":166,"rotate":160,"vFlip":162,"hFlip":162,"body":202},"\u003Cpath fill=\"currentColor\" d=\"M336 352c97.2 0 176-78.8 176-176S433.2 0 336 0S160 78.8 160 176c0 18.7 2.9 36.8 8.3 53.7L7 391c-4.5 4.5-7 10.6-7 17v80c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24v-40h40c13.3 0 24-10.7 24-24v-40h40c6.4 0 12.5-2.5 17-7l33.3-33.3c16.9 5.4 35 8.3 53.7 8.3m40-256a40 40 0 1 1 0 80a40 40 0 1 1 0-80\"\u002F>",{"left":160,"top":160,"width":161,"height":161,"rotate":160,"vFlip":162,"hFlip":162,"body":204},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"\u002F>",{"id":206,"title":68,"body":207,"description":69,"extension":2323,"hidden":162,"icon":70,"meta":2324,"navigation":2325,"path":67,"seo":2326,"stem":2327,"__hash__":2328},"docs\u002Fen\u002Foauth.md",{"type":208,"value":209,"toc":2302},"minimark",[210,219,224,333,336,340,363,366,370,388,476,661,796,802,842,847,853,862,1011,1018,1031,1054,1058,1067,1137,1206,1218,1225,1229,1250,1253,1299,1311,1315,1365,1372,1385,1403,1407,1414,1561,1564,1576,1580,1583,1593,1597,1652,1662,1665,1669,1672,1677,1688,1911,1917,1932,1940,1974,1979,1983,2035,2048,2075,2082,2104,2108,2190,2228,2232,2235,2285,2298],[211,212,213,214,218],"p",{},"Pingo Notify runs its own OAuth 2.1 authorization server. It issues the credential for software that acts ",[215,216,217],"strong",{},"on behalf of a person"," — an AI assistant, a third-party integration, anything you would rather not hand an API key to.",[220,221,223],"h2",{"id":222},"which-credential-to-use","Which credential to use",[225,226,227,242],"table",{},[228,229,230],"thead",{},[231,232,233,236,239],"tr",{},[234,235],"th",{},[234,237,238],{},"API key",[234,240,241],{},"OAuth 2.1 token",[243,244,245,261,272,293,304,315],"tbody",{},[231,246,247,251,256],{},[248,249,250],"td",{},"Sent as",[248,252,253],{},[51,254,255],{},"apikey: sk_live_…",[248,257,258],{},[51,259,260],{},"Authorization: Bearer …",[231,262,263,266,269],{},[248,264,265],{},"Identity",[248,267,268],{},"the member who created it",[248,270,271],{},"the person who approved the consent screen",[231,273,274,277,284],{},[248,275,276],{},"Workspace",[248,278,279,280,283],{},"the key's own; ",[51,281,282],{},"X-Account-Id"," switches it",[248,285,286,287,289,290],{},"fixed when consent was given; ",[51,288,282],{}," is ",[215,291,292],{},"refused",[231,294,295,298,301],{},[248,296,297],{},"Permissions",[248,299,300],{},"everything its creator can do",[248,302,303],{},"only the approved scopes, intersected with that person's role",[231,305,306,309,312],{},[248,307,308],{},"Expiry",[248,310,311],{},"never — revoked by hand",[248,313,314],{},"1 hour, renewed with a refresh token",[231,316,317,320,326],{},[248,318,319],{},"Right for",[248,321,322,325],{},[215,323,324],{},"your own"," backend",[248,327,328,329,332],{},"software that is ",[215,330,331],{},"not yours",", or that many people install",[211,334,335],{},"Never send both headers. On an endpoint that expects one, the other is ignored, not merged.",[220,337,339],{"id":338},"the-flow","The flow",[211,341,342,343,346,347,350,351,354,355,358,359,362],{},"Five calls. ",[215,344,345],{},"1"," and ",[215,348,349],{},"2"," happen once per application, ",[215,352,353],{},"3"," once per person who authorizes, ",[215,356,357],{},"4"," on every request, ",[215,360,361],{},"5"," about once an hour.",[364,365],"oauth-flow",{},[220,367,369],{"id":368},"_1-register-the-client","1 — Register the client",[211,371,372,375,376,383,384,387],{},[51,373,374],{},"POST \u002Fv3\u002Foauth\u002Fregister"," (",[377,378,382],"a",{"href":379,"rel":380},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc7591",[381],"nofollow","RFC 7591","). Open, no credential needed, answers ",[215,385,386],{},"201",".",[389,390,395],"pre",{"className":391,"code":392,"language":393,"meta":394,"style":394},"language-bash shiki shiki-themes github-light github-dark","curl -X POST https:\u002F\u002Fapi.pingonotify.com\u002Fv3\u002Foauth\u002Fregister \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"client_name\": \"Acme Assistant\",\n    \"redirect_uris\": [\"https:\u002F\u002Facme.example\u002Foauth\u002Fcallback\"],\n    \"token_endpoint_auth_method\": \"none\",\n    \"grant_types\": [\"authorization_code\", \"refresh_token\"],\n    \"scope\": \"profile connections:read messages:send\"\n  }'\n","bash","",[51,396,397,420,431,440,446,452,458,464,470],{"__ignoreMap":394},[398,399,402,406,410,414,417],"span",{"class":400,"line":401},"line",1,[398,403,405],{"class":404},"sScJk","curl",[398,407,409],{"class":408},"sj4cs"," -X",[398,411,413],{"class":412},"sZZnC"," POST",[398,415,416],{"class":412}," https:\u002F\u002Fapi.pingonotify.com\u002Fv3\u002Foauth\u002Fregister",[398,418,419],{"class":408}," \\\n",[398,421,423,426,429],{"class":400,"line":422},2,[398,424,425],{"class":408},"  -H",[398,427,428],{"class":412}," \"Content-Type: application\u002Fjson\"",[398,430,419],{"class":408},[398,432,434,437],{"class":400,"line":433},3,[398,435,436],{"class":408},"  -d",[398,438,439],{"class":412}," '{\n",[398,441,443],{"class":400,"line":442},4,[398,444,445],{"class":412},"    \"client_name\": \"Acme Assistant\",\n",[398,447,449],{"class":400,"line":448},5,[398,450,451],{"class":412},"    \"redirect_uris\": [\"https:\u002F\u002Facme.example\u002Foauth\u002Fcallback\"],\n",[398,453,455],{"class":400,"line":454},6,[398,456,457],{"class":412},"    \"token_endpoint_auth_method\": \"none\",\n",[398,459,461],{"class":400,"line":460},7,[398,462,463],{"class":412},"    \"grant_types\": [\"authorization_code\", \"refresh_token\"],\n",[398,465,467],{"class":400,"line":466},8,[398,468,469],{"class":412},"    \"scope\": \"profile connections:read messages:send\"\n",[398,471,473],{"class":400,"line":472},9,[398,474,475],{"class":412},"  }'\n",[225,477,478,491],{},[228,479,480],{},[231,481,482,485,488],{},[234,483,484],{},"Field",[234,486,487],{},"Required",[234,489,490],{},"Value",[243,492,493,535,553,565,577,589,610,624,646],{},[231,494,495,500,505],{},[248,496,497],{},[51,498,499],{},"redirect_uris",[248,501,502],{},[215,503,504],{},"yes",[248,506,507,508,511,512,515,516,519,520,523,524,523,527,530,531,534],{},"1 to 10 URIs, matched exactly at ",[51,509,510],{},"\u002Fauthorize",". Absolute, no fragment, no credentials. ",[51,513,514],{},"https"," always; ",[51,517,518],{},"http"," only on loopback (",[51,521,522],{},"localhost",", ",[51,525,526],{},"127.0.0.1",[51,528,529],{},"[::1]","); a native-app scheme is fine if it contains a dot (",[51,532,533],{},"com.acme.app:\u002Foauth",")",[231,536,537,542,545],{},[248,538,539],{},[51,540,541],{},"client_name",[248,543,544],{},"no",[248,546,547,548,552],{},"Shown on the consent screen, up to 255 characters. Omit it and your app appears as ",[549,550,551],"em",{},"Aplicativo sem nome"," — always send it",[231,554,555,560,562],{},[248,556,557],{},[51,558,559],{},"client_uri",[248,561,544],{},[248,563,564],{},"Shown on the consent screen as the app's site",[231,566,567,572,574],{},[248,568,569],{},[51,570,571],{},"logo_uri",[248,573,544],{},[248,575,576],{},"An image URL. Shown as the app's face on the consent screen",[231,578,579,584,586],{},[248,580,581],{},[51,582,583],{},"scope",[248,585,544],{},[248,587,588],{},"Space-separated ceiling for this client. Omitted grants every requestable scope",[231,590,591,596,598],{},[248,592,593],{},[51,594,595],{},"grant_types",[248,597,544],{},[248,599,600,523,603,606,607,609],{},[51,601,602],{},"authorization_code",[51,604,605],{},"refresh_token",". Omitted means ",[51,608,602],{}," alone",[231,611,612,617,619],{},[248,613,614],{},[51,615,616],{},"response_types",[248,618,544],{},[248,620,621,623],{},[51,622,51],{}," is the only accepted value",[231,625,626,631,633],{},[248,627,628],{},[51,629,630],{},"token_endpoint_auth_method",[248,632,544],{},[248,634,635,523,638,641,642,645],{},[51,636,637],{},"none",[51,639,640],{},"client_secret_basic"," or ",[51,643,644],{},"client_secret_post",". Omitted makes a confidential client",[231,647,648,656,658],{},[248,649,650,523,653],{},[51,651,652],{},"software_id",[51,654,655],{},"software_version",[248,657,544],{},[248,659,660],{},"Accepted and validated, then ignored: not stored, not returned",[389,662,666],{"className":663,"code":664,"language":665,"meta":394,"style":394},"language-json shiki shiki-themes github-light github-dark","{\n  \"client_id\": \"xf3K9…\",\n  \"client_id_issued_at\": 1780000000,\n  \"client_secret_expires_at\": 0,\n  \"client_name\": \"Acme Assistant\",\n  \"redirect_uris\": [\"https:\u002F\u002Facme.example\u002Foauth\u002Fcallback\"],\n  \"grant_types\": [\"authorization_code\", \"refresh_token\"],\n  \"response_types\": [\"code\"],\n  \"token_endpoint_auth_method\": \"none\",\n  \"scope\": \"profile connections:read messages:send\"\n}\n","json",[51,667,668,674,688,700,712,724,738,755,767,779,790],{"__ignoreMap":394},[398,669,670],{"class":400,"line":401},[398,671,673],{"class":672},"sVt8B","{\n",[398,675,676,679,682,685],{"class":400,"line":422},[398,677,678],{"class":408},"  \"client_id\"",[398,680,681],{"class":672},": ",[398,683,684],{"class":412},"\"xf3K9…\"",[398,686,687],{"class":672},",\n",[398,689,690,693,695,698],{"class":400,"line":433},[398,691,692],{"class":408},"  \"client_id_issued_at\"",[398,694,681],{"class":672},[398,696,697],{"class":408},"1780000000",[398,699,687],{"class":672},[398,701,702,705,707,710],{"class":400,"line":442},[398,703,704],{"class":408},"  \"client_secret_expires_at\"",[398,706,681],{"class":672},[398,708,709],{"class":408},"0",[398,711,687],{"class":672},[398,713,714,717,719,722],{"class":400,"line":448},[398,715,716],{"class":408},"  \"client_name\"",[398,718,681],{"class":672},[398,720,721],{"class":412},"\"Acme Assistant\"",[398,723,687],{"class":672},[398,725,726,729,732,735],{"class":400,"line":454},[398,727,728],{"class":408},"  \"redirect_uris\"",[398,730,731],{"class":672},": [",[398,733,734],{"class":412},"\"https:\u002F\u002Facme.example\u002Foauth\u002Fcallback\"",[398,736,737],{"class":672},"],\n",[398,739,740,743,745,748,750,753],{"class":400,"line":460},[398,741,742],{"class":408},"  \"grant_types\"",[398,744,731],{"class":672},[398,746,747],{"class":412},"\"authorization_code\"",[398,749,523],{"class":672},[398,751,752],{"class":412},"\"refresh_token\"",[398,754,737],{"class":672},[398,756,757,760,762,765],{"class":400,"line":466},[398,758,759],{"class":408},"  \"response_types\"",[398,761,731],{"class":672},[398,763,764],{"class":412},"\"code\"",[398,766,737],{"class":672},[398,768,769,772,774,777],{"class":400,"line":472},[398,770,771],{"class":408},"  \"token_endpoint_auth_method\"",[398,773,681],{"class":672},[398,775,776],{"class":412},"\"none\"",[398,778,687],{"class":672},[398,780,782,785,787],{"class":400,"line":781},10,[398,783,784],{"class":408},"  \"scope\"",[398,786,681],{"class":672},[398,788,789],{"class":412},"\"profile connections:read messages:send\"\n",[398,791,793],{"class":400,"line":792},11,[398,794,795],{"class":672},"}\n",[211,797,798,801],{},[51,799,800],{},"client_secret"," is present only for a confidential client, and only in this response.",[803,804,805,810],"warning",{},[211,806,807],{},[215,808,809],{},"Two omissions cost an afternoon each.",[811,812,813,827],"ul",{},[814,815,816,817,819,820,822,823,826],"li",{},"Leave ",[51,818,595],{}," out and the client gets ",[51,821,602],{}," alone — ",[215,824,825],{},"no refresh token is ever issued",", and your integration dies one hour later needing a human.",[814,828,816,829,831,832,835,836,838,839,841],{},[51,830,630],{}," out and you get a ",[215,833,834],{},"confidential"," client with a ",[51,837,800],{}," shown exactly once, which you must then send on every token call. Send ",[51,840,776],{}," to be a public client that proves itself with PKCE.",[211,843,844,846],{},[51,845,583],{}," omitted grants the client every requestable scope. Registering is not approving: a client registered this way has no owner and no workspace until a person authorizes it.",[220,848,850,851],{"id":849},"_2-send-the-person-to-authorize","2 — Send the person to ",[51,852,510],{},[211,854,855,858,859,387],{},[51,856,857],{},"GET \u002Fv3\u002Foauth\u002Fauthorize",", in a browser. Not an API call — it always answers ",[51,860,861],{},"302",[225,863,864,875],{},[228,865,866],{},[231,867,868,871,873],{},[234,869,870],{},"Parameter",[234,872,487],{},[234,874,490],{},[243,876,877,891,903,916,931,950,964,977,993],{},[231,878,879,884,886],{},[248,880,881],{},[51,882,883],{},"response_type",[248,885,504],{},[248,887,888,890],{},[51,889,51],{}," — the only value accepted",[231,892,893,898,900],{},[248,894,895],{},[51,896,897],{},"client_id",[248,899,504],{},[248,901,902],{},"from step 1",[231,904,905,910,913],{},[248,906,907],{},[51,908,909],{},"redirect_uri",[248,911,912],{},"if the client registered more than one",[248,914,915],{},"must match one registered exactly",[231,917,918,923,925],{},[248,919,920],{},[51,921,922],{},"code_challenge",[248,924,504],{},[248,926,927,928],{},"base64url of ",[51,929,930],{},"SHA-256(code_verifier)",[231,932,933,938,940],{},[248,934,935],{},[51,936,937],{},"code_challenge_method",[248,939,504],{},[248,941,942,945,946,949],{},[51,943,944],{},"S256"," — must be explicit; ",[51,947,948],{},"plain"," does not exist here",[231,951,952,956,958],{},[248,953,954],{},[51,955,583],{},[248,957,544],{},[248,959,960,961],{},"space-separated; defaults to ",[51,962,963],{},"profile",[231,965,966,971,974],{},[248,967,968],{},[51,969,970],{},"state",[248,972,973],{},"recommended",[248,975,976],{},"echoed back untouched",[231,978,979,984,986],{},[248,980,981],{},[51,982,983],{},"resource",[248,985,544],{},[248,987,988,989],{},"the exact URL the token is for — see ",[377,990,992],{"href":991},"#4--call-the-api","Audience",[231,994,995,1000,1002],{},[248,996,997],{},[51,998,999],{},"prompt",[248,1001,544],{},[248,1003,1004,1007,1008,1010],{},[51,1005,1006],{},"consent"," forces the screen; ",[51,1009,637],{}," forbids any interaction",[211,1012,1013,1014,1017],{},"PKCE is mandatory for ",[215,1015,1016],{},"every"," client, confidential ones included.",[211,1019,1020,1021,1023,1024,523,1026,346,1028,387],{},"The person signs in, picks a workspace and approves. Then the browser lands on your ",[51,1022,909],{}," with ",[51,1025,51],{},[51,1027,970],{},[51,1029,1030],{},"iss",[1032,1033,1034,1044],"note",{},[211,1035,1036,1039,1040,1043],{},[215,1037,1038],{},"Only an Owner or an Admin can authorize an application for a workspace."," The screen offers only the workspaces where the person's role allows it. Approving without choosing one binds the token to their ",[215,1041,1042],{},"personal"," account.",[211,1045,1046,1047,1050,1051,1053],{},"A person can approve ",[215,1048,1049],{},"fewer"," scopes than you asked for. Read the ",[51,1052,583],{}," you get back in step 3 — it is the truth, your request was a wish.",[220,1055,1057],{"id":1056},"_3-exchange-the-code","3 — Exchange the code",[211,1059,1060,523,1063,1066],{},[51,1061,1062],{},"POST \u002Fv3\u002Foauth\u002Ftoken",[51,1064,1065],{},"application\u002Fx-www-form-urlencoded"," or JSON.",[389,1068,1070],{"className":391,"code":1069,"language":393,"meta":394,"style":394},"curl -X POST https:\u002F\u002Fapi.pingonotify.com\u002Fv3\u002Foauth\u002Ftoken \\\n  -H \"Content-Type: application\u002Fx-www-form-urlencoded\" \\\n  -d grant_type=authorization_code \\\n  -d code=aG9sYS4uLg \\\n  -d redirect_uri=https:\u002F\u002Facme.example\u002Foauth\u002Fcallback \\\n  -d client_id=xf3K9... \\\n  -d code_verifier=dBjftJeZ4CVP...\n",[51,1071,1072,1085,1094,1103,1112,1121,1130],{"__ignoreMap":394},[398,1073,1074,1076,1078,1080,1083],{"class":400,"line":401},[398,1075,405],{"class":404},[398,1077,409],{"class":408},[398,1079,413],{"class":412},[398,1081,1082],{"class":412}," https:\u002F\u002Fapi.pingonotify.com\u002Fv3\u002Foauth\u002Ftoken",[398,1084,419],{"class":408},[398,1086,1087,1089,1092],{"class":400,"line":422},[398,1088,425],{"class":408},[398,1090,1091],{"class":412}," \"Content-Type: application\u002Fx-www-form-urlencoded\"",[398,1093,419],{"class":408},[398,1095,1096,1098,1101],{"class":400,"line":433},[398,1097,436],{"class":408},[398,1099,1100],{"class":412}," grant_type=authorization_code",[398,1102,419],{"class":408},[398,1104,1105,1107,1110],{"class":400,"line":442},[398,1106,436],{"class":408},[398,1108,1109],{"class":412}," code=aG9sYS4uLg",[398,1111,419],{"class":408},[398,1113,1114,1116,1119],{"class":400,"line":448},[398,1115,436],{"class":408},[398,1117,1118],{"class":412}," redirect_uri=https:\u002F\u002Facme.example\u002Foauth\u002Fcallback",[398,1120,419],{"class":408},[398,1122,1123,1125,1128],{"class":400,"line":454},[398,1124,436],{"class":408},[398,1126,1127],{"class":412}," client_id=xf3K9...",[398,1129,419],{"class":408},[398,1131,1132,1134],{"class":400,"line":460},[398,1133,436],{"class":408},[398,1135,1136],{"class":412}," code_verifier=dBjftJeZ4CVP...\n",[389,1138,1140],{"className":663,"code":1139,"language":665,"meta":394,"style":394},"{\n  \"access_token\": \"eyJ…\",\n  \"token_type\": \"Bearer\",\n  \"expires_in\": 3600,\n  \"refresh_token\": \"8xLOxBt…\",\n  \"scope\": \"profile connections:read messages:send\"\n}\n",[51,1141,1142,1146,1158,1170,1182,1194,1202],{"__ignoreMap":394},[398,1143,1144],{"class":400,"line":401},[398,1145,673],{"class":672},[398,1147,1148,1151,1153,1156],{"class":400,"line":422},[398,1149,1150],{"class":408},"  \"access_token\"",[398,1152,681],{"class":672},[398,1154,1155],{"class":412},"\"eyJ…\"",[398,1157,687],{"class":672},[398,1159,1160,1163,1165,1168],{"class":400,"line":433},[398,1161,1162],{"class":408},"  \"token_type\"",[398,1164,681],{"class":672},[398,1166,1167],{"class":412},"\"Bearer\"",[398,1169,687],{"class":672},[398,1171,1172,1175,1177,1180],{"class":400,"line":442},[398,1173,1174],{"class":408},"  \"expires_in\"",[398,1176,681],{"class":672},[398,1178,1179],{"class":408},"3600",[398,1181,687],{"class":672},[398,1183,1184,1187,1189,1192],{"class":400,"line":448},[398,1185,1186],{"class":408},"  \"refresh_token\"",[398,1188,681],{"class":672},[398,1190,1191],{"class":412},"\"8xLOxBt…\"",[398,1193,687],{"class":672},[398,1195,1196,1198,1200],{"class":400,"line":454},[398,1197,784],{"class":408},[398,1199,681],{"class":672},[398,1201,789],{"class":412},[398,1203,1204],{"class":400,"line":460},[398,1205,795],{"class":672},[211,1207,1208,1210,1211,1214,1215,1217],{},[51,1209,605],{}," appears only if the client registered that grant. A public client must ",[215,1212,1213],{},"not"," send ",[51,1216,800],{},"; a confidential one must, by HTTP Basic or as a form field.",[211,1219,1220,1221,1224],{},"The code is valid for ",[215,1222,1223],{},"60 seconds"," and once. Replaying your own code revokes the whole grant — that is reuse detection, not a bug.",[220,1226,1228],{"id":1227},"_4-call-the-api","4 — Call the API",[389,1230,1232],{"className":391,"code":1231,"language":393,"meta":394,"style":394},"curl https:\u002F\u002Fapi.pingonotify.com\u002Fv3\u002Fconnections \\\n  -H \"Authorization: Bearer eyJ…\"\n",[51,1233,1234,1243],{"__ignoreMap":394},[398,1235,1236,1238,1241],{"class":400,"line":401},[398,1237,405],{"class":404},[398,1239,1240],{"class":412}," https:\u002F\u002Fapi.pingonotify.com\u002Fv3\u002Fconnections",[398,1242,419],{"class":408},[398,1244,1245,1247],{"class":400,"line":422},[398,1246,425],{"class":408},[398,1248,1249],{"class":412}," \"Authorization: Bearer eyJ…\"\n",[211,1251,1252],{},"Three rules that have no equivalent on the API-key side:",[811,1254,1255,1270,1280],{},[814,1256,1257,1260,1261,1263,1264],{},[215,1258,1259],{},"The workspace is fixed."," Sending ",[51,1262,282],{}," for a different workspace answers ",[215,1265,1266,1267],{},"403 — ",[51,1268,1269],{},"This access token is bound to a different workspace; re-authorize to switch.",[814,1271,1272,1275,1276,1279],{},[215,1273,1274],{},"The scope is a ceiling, never a grant."," Effective permission is the intersection of the approved scopes and what that person's role allows. A token holding ",[51,1277,1278],{},"helpdesk:write"," in the hands of an Agent still does only what an Agent does.",[814,1281,1282,1287,1288,1291,1292,1295,1296,1298],{},[215,1283,1284,1286],{},[51,1285,983],{}," binds the token to a path."," Ask for ",[51,1289,1290],{},"https:\u002F\u002Fapi.pingonotify.com\u002Fv3\u002Fmcp"," and the token is accepted under ",[51,1293,1294],{},"\u002Fv3\u002Fmcp"," and answers 401 everywhere else. Omit ",[51,1297,983],{}," and the token works across the API. Ask for the resource you actually intend to call.",[211,1300,1301,1302,1307,1308],{},"Anything with no scope that covers it is closed to OAuth tokens entirely, and says so: ",[549,1303,1304],{},[51,1305,1306],{},"this operation is not available to OAuth clients",". Consent management is the notable case — no scope reaches it, so ",[215,1309,1310],{},"an app can never list or revoke another app's access.",[220,1312,1314],{"id":1313},"_5-refresh","5 — Refresh",[389,1316,1318],{"className":391,"code":1317,"language":393,"meta":394,"style":394},"curl -X POST https:\u002F\u002Fapi.pingonotify.com\u002Fv3\u002Foauth\u002Ftoken \\\n  -H \"Content-Type: application\u002Fx-www-form-urlencoded\" \\\n  -d grant_type=refresh_token \\\n  -d refresh_token=8xLOxBt... \\\n  -d client_id=xf3K9...\n",[51,1319,1320,1332,1340,1349,1358],{"__ignoreMap":394},[398,1321,1322,1324,1326,1328,1330],{"class":400,"line":401},[398,1323,405],{"class":404},[398,1325,409],{"class":408},[398,1327,413],{"class":412},[398,1329,1082],{"class":412},[398,1331,419],{"class":408},[398,1333,1334,1336,1338],{"class":400,"line":422},[398,1335,425],{"class":408},[398,1337,1091],{"class":412},[398,1339,419],{"class":408},[398,1341,1342,1344,1347],{"class":400,"line":433},[398,1343,436],{"class":408},[398,1345,1346],{"class":412}," grant_type=refresh_token",[398,1348,419],{"class":408},[398,1350,1351,1353,1356],{"class":400,"line":442},[398,1352,436],{"class":408},[398,1354,1355],{"class":412}," refresh_token=8xLOxBt...",[398,1357,419],{"class":408},[398,1359,1360,1362],{"class":400,"line":448},[398,1361,436],{"class":408},[398,1363,1364],{"class":412}," client_id=xf3K9...\n",[211,1366,1367,1368,1371],{},"The response has the same shape as step 3, with a ",[215,1369,1370],{},"new refresh token",". Rotation is mandatory: the one you presented is dead the moment the new pair is issued. Store the new one before you use the new access token.",[1373,1374,1375],"danger",{},[211,1376,1377,1380,1381,1384],{},[215,1378,1379],{},"Presenting a refresh token twice revokes the entire grant"," — every token that client holds for that person and workspace, at once, with ",[51,1382,1383],{},"invalid_grant",". That is the defence against a stolen token, and it cannot tell your retry loop apart from a thief. Never refresh concurrently from two processes, and never retry a refresh whose response you did not read.",[211,1386,1387,1388,346,1390,1392,1393,1396,1397,641,1400,387],{},"Both ",[51,1389,583],{},[51,1391,983],{}," may only ",[215,1394,1395],{},"narrow"," on refresh. Asking for more returns ",[51,1398,1399],{},"invalid_scope",[51,1401,1402],{},"invalid_target",[220,1404,1406],{"id":1405},"scopes","Scopes",[211,1408,1409,1410,1413],{},"Twelve scopes can be requested. ",[51,1411,1412],{},"legacy"," exists but no client may ask for it — it belongs to the v1 API-key bridge.",[225,1415,1416,1426],{},[228,1417,1418],{},[231,1419,1420,1423],{},[234,1421,1422],{},"Scope",[234,1424,1425],{},"Grants",[243,1427,1428,1440,1450,1460,1472,1482,1492,1502,1512,1522,1531,1541,1551],{},[231,1429,1430,1434],{},[248,1431,1432],{},[51,1433,963],{},[248,1435,1436,1437,1439],{},"Who authorized, and which workspace. The default when ",[51,1438,583],{}," is omitted",[231,1441,1442,1447],{},[248,1443,1444],{},[51,1445,1446],{},"connections:read",[248,1448,1449],{},"Read connections and their status",[231,1451,1452,1457],{},[248,1453,1454],{},[51,1455,1456],{},"connections:connect",[248,1458,1459],{},"Pair and disconnect a number (QR code and logout), without the power to create or delete connections",[231,1461,1462,1467],{},[248,1463,1464],{},[51,1465,1466],{},"connections:write",[248,1468,1469,1470],{},"Create, edit, connect and disconnect connections. Also satisfies ",[51,1471,1446],{},[231,1473,1474,1479],{},[248,1475,1476],{},[51,1477,1478],{},"messages:read",[248,1480,1481],{},"Read message history and download received attachments",[231,1483,1484,1489],{},[248,1485,1486],{},[51,1487,1488],{},"messages:send",[248,1490,1491],{},"Send messages: text, media, audio, sticker, template, list, buttons",[231,1493,1494,1499],{},[248,1495,1496],{},[51,1497,1498],{},"contacts:read",[248,1500,1501],{},"Read contacts",[231,1503,1504,1509],{},[248,1505,1506],{},[51,1507,1508],{},"contacts:write",[248,1510,1511],{},"Create and edit contacts",[231,1513,1514,1519],{},[248,1515,1516],{},[51,1517,1518],{},"helpdesk:read",[248,1520,1521],{},"Read helpdesk conversations, contacts and settings",[231,1523,1524,1528],{},[248,1525,1526],{},[51,1527,1278],{},[248,1529,1530],{},"Reply to and manage the helpdesk. Needs the PRO plan on top of the scope",[231,1532,1533,1538],{},[248,1534,1535],{},[51,1536,1537],{},"webhooks:read",[248,1539,1540],{},"Read webhooks and their delivery history",[231,1542,1543,1548],{},[248,1544,1545],{},[51,1546,1547],{},"webhooks:write",[248,1549,1550],{},"Create, edit and delete webhooks, and read the signing secret",[231,1552,1553,1558],{},[248,1554,1555],{},[51,1556,1557],{},"stats:read",[248,1559,1560],{},"Read workspace statistics",[211,1562,1563],{},"Ask for the least you need. Every extra scope is a line on the consent screen that a person can refuse, and refusing narrows the whole approval.",[1032,1565,1566],{},[211,1567,1568,1569,1572,1573,1575],{},"If your application does not work without a specific permission, it can be marked as ",[215,1570,1571],{},"required",": the checkbox is locked on the screen, with the reason next to it, and the authorization is refused if anyone tries to drop it underneath. This is configured on the client registration, not on ",[51,1574,510],{}," — talk to support about your case.",[220,1577,1579],{"id":1578},"how-your-app-shows-up-on-the-screen","How your app shows up on the screen",[211,1581,1582],{},"The user sees the name, logo and website you registered — plus a warning when\nthe client registered itself through the dynamic endpoint, saying the displayed\nname was chosen by the app itself.",[211,1584,1585,1586,1589,1590,1592],{},"Applications Pingo has verified show a ",[215,1587,1588],{},"Verified by Pingo"," badge in place of\nthat warning. Verification is granted by the platform and confirms who publishes\nthe application — it does ",[215,1591,1213],{}," change what the app can do and does not skip\nconsent: permissions are still the user's choice, one by one. There is no way\nfor an application to mark itself as verified.",[220,1594,1596],{"id":1595},"revoking","Revoking",[225,1598,1599,1612],{},[228,1600,1601],{},[231,1602,1603,1606,1609],{},[234,1604,1605],{},"Goal",[234,1607,1608],{},"Call",[234,1610,1611],{},"Credential",[243,1613,1614,1627,1640],{},[231,1615,1616,1619,1624],{},[248,1617,1618],{},"The app drops its own token",[248,1620,1621],{},[51,1622,1623],{},"POST \u002Fv3\u002Foauth\u002Frevoke",[248,1625,1626],{},"the client itself",[231,1628,1629,1632,1637],{},[248,1630,1631],{},"The workspace lists who has access",[248,1633,1634],{},[51,1635,1636],{},"GET \u002Fv3\u002Foauth\u002Fconsents",[248,1638,1639],{},"API key, or the dashboard",[231,1641,1642,1645,1650],{},[248,1643,1644],{},"The workspace cuts an app off",[248,1646,1647],{},[51,1648,1649],{},"DELETE \u002Fv3\u002Foauth\u002Fconsents\u002F{id}",[248,1651,1639],{},[211,1653,1654,1657,1658,1661],{},[51,1655,1656],{},"revoke"," answers ",[215,1659,1660],{},"200 for any input",", including a token that never existed. That is deliberate: a different answer would turn the endpoint into an oracle for guessing valid tokens.",[211,1663,1664],{},"Re-approving an app with fewer scopes also revokes the tokens already issued under the old approval, so the consent screen and reality never disagree.",[220,1666,1668],{"id":1667},"errors","Errors",[211,1670,1671],{},"Where an error arrives matters more than its code, because it decides what your client has to parse. There are three places.",[1673,1674,1676],"h3",{"id":1675},"as-a-json-body","As a JSON body",[211,1678,1679,1680,1683,1684,1687],{},"The body is exactly ",[51,1681,1682],{},"{ \"error\": \"…\", \"error_description\": \"…\" }"," — no other envelope, no ",[51,1685,1686],{},"statusCode"," field.",[225,1689,1690,1711],{},[228,1691,1692],{},[231,1693,1694,1699,1702,1705,1708],{},[234,1695,1696],{},[51,1697,1698],{},"error",[234,1700,1701],{},"HTTP",[234,1703,1704],{},"Endpoint",[234,1706,1707],{},"Cause",[234,1709,1710],{},"Fix",[243,1712,1713,1738,1765,1785,1805,1825,1846,1871,1893],{},[231,1714,1715,1720,1723,1726,1732],{},[248,1716,1717],{},[51,1718,1719],{},"invalid_client_metadata",[248,1721,1722],{},"400",[248,1724,1725],{},"register",[248,1727,1728,1729,1731],{},"A registration field is wrong, ",[51,1730,595],{}," has an unsupported value, or dynamic registration is disabled on this server",[248,1733,1734,1737],{},[51,1735,1736],{},"error_description"," names the field",[231,1739,1740,1745,1747,1750,1756],{},[248,1741,1742],{},[51,1743,1744],{},"invalid_redirect_uri",[248,1746,1722],{},[248,1748,1749],{},"register, authorize",[248,1751,1752,1753,1755],{},"A redirect URI is relative, carries a fragment or credentials, or is ",[51,1754,518],{}," outside loopback",[248,1757,1758,1759,1761,1762],{},"Use an absolute ",[51,1760,514],{}," URI, or ",[51,1763,1764],{},"http:\u002F\u002Flocalhost",[231,1766,1767,1771,1773,1776,1782],{},[248,1768,1769],{},[51,1770,1399],{},[248,1772,1722],{},[248,1774,1775],{},"register, token",[248,1777,1778,1779,1781],{},"A scope is unknown, is ",[51,1780,1412],{},", is outside what the client registered, or a refresh tried to widen",[248,1783,1784],{},"Ask for a subset of the client's scopes",[231,1786,1787,1792,1794,1797,1800],{},[248,1788,1789],{},[51,1790,1791],{},"invalid_request",[248,1793,1722],{},[248,1795,1796],{},"authorize, token, revoke, introspect",[248,1798,1799],{},"A parameter is missing, malformed or contradictory",[248,1801,1802,1803],{},"Read ",[51,1804,1736],{},[231,1806,1807,1812,1815,1820,1823],{},[248,1808,1809],{},[51,1810,1811],{},"invalid_client",[248,1813,1814],{},"400 authorize · 401 token, revoke, introspect",[248,1816,1817,1819],{},[51,1818,897],{}," is unknown, or a confidential client's secret is missing or wrong, or a public client sent one",[248,1821,1822],{},"Public clients send no secret",[248,1824],{},[231,1826,1827,1832,1834,1837,1840],{},[248,1828,1829],{},[51,1830,1831],{},"unauthorized_client",[248,1833,1722],{},[248,1835,1836],{},"token",[248,1838,1839],{},"The client did not register the grant it is using",[248,1841,1842,1843,1845],{},"Register ",[51,1844,605],{}," before using it",[231,1847,1848,1853,1855,1857,1868],{},[248,1849,1850],{},[51,1851,1852],{},"unsupported_grant_type",[248,1854,1722],{},[248,1856,1836],{},[248,1858,1859,1862,1863,1865,1866],{},[51,1860,1861],{},"grant_type"," is neither ",[51,1864,602],{}," nor ",[51,1867,605],{},[248,1869,1870],{},"—",[231,1872,1873,1877,1879,1881,1887],{},[248,1874,1875],{},[51,1876,1383],{},[248,1878,1722],{},[248,1880,1836],{},[248,1882,1883,1884],{},"The code expired (60 s), was already used, belongs to another client, or a ",[215,1885,1886],{},"refresh token was replayed",[248,1888,1889,1890,1892],{},"On a replay the whole grant is gone: start at ",[51,1891,510],{}," again",[231,1894,1895,1899,1901,1903,1908],{},[248,1896,1897],{},[51,1898,1402],{},[248,1900,1722],{},[248,1902,1836],{},[248,1904,1905,1907],{},[51,1906,983],{}," is not on the issuer's origin, has a fragment, or a refresh tried to widen it",[248,1909,1910],{},"Send the exact resource URL, or nothing",[1673,1912,1914,1915],{"id":1913},"on-your-redirect_uri","On your ",[51,1916,909],{},[211,1918,1919,1920,346,1922,1924,1925,1931],{},"Once ",[51,1921,897],{},[51,1923,909],{}," check out, ",[215,1926,1927,1928,1930],{},"every remaining authorize error becomes a ",[51,1929,861],{}," to your callback",", never a JSON body — answering in the body before that point would make the endpoint an open redirect. Parse the query, not the status:",[389,1933,1938],{"className":1934,"code":1936,"language":1937},[1935],"language-text","https:\u002F\u002Facme.example\u002Foauth\u002Fcallback?error=invalid_scope&error_description=…&state=…&iss=https:\u002F\u002Fapi.pingonotify.com\n","text",[51,1939,1936],{"__ignoreMap":394},[211,1941,1942,1944,1945,1950,1951,523,1954,523,1956,523,1958,523,1960,523,1962,523,1965,523,1968,523,1971,387],{},[51,1943,1030],{}," is there so you can tell which authorization server answered (",[377,1946,1949],{"href":1947,"rel":1948},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc9207",[381],"RFC 9207","). The codes that arrive this way: ",[51,1952,1953],{},"unsupported_response_type",[51,1955,1831],{},[51,1957,1791],{},[51,1959,1399],{},[51,1961,1402],{},[51,1963,1964],{},"login_required",[51,1966,1967],{},"consent_required",[51,1969,1970],{},"access_denied",[51,1972,1973],{},"server_error",[211,1975,1976,1978],{},[51,1977,1970],{}," means a person refused, or their role does not allow authorizing that workspace. There is nothing to retry.",[1673,1980,1982],{"id":1981},"on-an-api-call","On an API call",[225,1984,1985,1999],{},[228,1986,1987],{},[231,1988,1989,1993,1995,1997],{},[234,1990,1991],{},[51,1992,1698],{},[234,1994,1701],{},[234,1996,1707],{},[234,1998,1710],{},[243,2000,2001,2019],{},[231,2002,2003,2008,2011,2016],{},[248,2004,2005],{},[51,2006,2007],{},"invalid_token",[248,2009,2010],{},"401",[248,2012,2013,2014],{},"Missing, expired, revoked, or issued for a different ",[51,2015,983],{},[248,2017,2018],{},"Refresh; if that fails, authorize again",[231,2020,2021,2026,2029,2032],{},[248,2022,2023],{},[51,2024,2025],{},"insufficient_scope",[248,2027,2028],{},"403",[248,2030,2031],{},"The token lacks a scope, or nothing grants that operation to OAuth clients at all",[248,2033,2034],{},"Re-authorize with the scope the response names",[211,2036,2037,2038,2041,2042,2044,2045,2047],{},"Both carry a ",[51,2039,2040],{},"WWW-Authenticate"," header, and on ",[51,2043,2025],{}," it names the missing ",[51,2046,583],{},":",[389,2049,2052],{"className":2050,"code":2051,"language":518,"meta":394,"style":394},"language-http shiki shiki-themes github-light github-dark","WWW-Authenticate: Bearer realm=\"pingo\", error=\"invalid_token\",\n  error_description=\"the access token is invalid, expired or revoked\",\n  resource_metadata=\"https:\u002F\u002Fapi.pingonotify.com\u002F.well-known\u002Foauth-protected-resource\u002Fv3\u002Fmcp\"\n",[51,2053,2054,2065,2070],{"__ignoreMap":394},[398,2055,2056,2059,2062],{"class":400,"line":401},[398,2057,2040],{"class":2058},"s9eBZ",[398,2060,2047],{"class":2061},"szBVR",[398,2063,2064],{"class":412}," Bearer realm=\"pingo\", error=\"invalid_token\",\n",[398,2066,2067],{"class":400,"line":422},[398,2068,2069],{"class":672},"  error_description=\"the access token is invalid, expired or revoked\",\n",[398,2071,2072],{"class":400,"line":433},[398,2073,2074],{"class":672},"  resource_metadata=\"https:\u002F\u002Fapi.pingonotify.com\u002F.well-known\u002Foauth-protected-resource\u002Fv3\u002Fmcp\"\n",[211,2076,2077,2078,2081],{},"Follow ",[51,2079,2080],{},"resource_metadata"," instead of hardcoding endpoints — it is the thread back to the authorization server.",[1032,2083,2084,2094],{},[211,2085,2086,2087,2090,2091,2093],{},"Rate limiting answers ",[215,2088,2089],{},"429",", and its body is ",[549,2092,1213],{}," in the OAuth error shape. Treat a 429 as transport, not as a protocol error.",[211,2095,2096,2097,346,2100,2103],{},"Two codes exist in the OAuth vocabulary but this server never returns them: ",[51,2098,2099],{},"interaction_required",[51,2101,2102],{},"temporarily_unavailable",". Do not write handling for them.",[220,2105,2107],{"id":2106},"lifetimes-and-limits","Lifetimes and limits",[225,2109,2110,2118],{},[228,2111,2112],{},[231,2113,2114,2116],{},[234,2115],{},[234,2117],{},[243,2119,2120,2128,2136,2148,2156,2171,2182],{},[231,2121,2122,2125],{},[248,2123,2124],{},"Authorization code",[248,2126,2127],{},"60 seconds, single use",[231,2129,2130,2133],{},[248,2131,2132],{},"Access token",[248,2134,2135],{},"1 hour — unless the client turns expiry off",[231,2137,2138,2141],{},[248,2139,2140],{},"Refresh token",[248,2142,2143,2144,2147],{},"30 days ",[215,2145,2146],{},"of inactivity",", rotated on every use. Each renewal restarts the clock",[231,2149,2150,2153],{},[248,2151,2152],{},"Pending authorization request",[248,2154,2155],{},"10 minutes",[231,2157,2158,2168],{},[248,2159,2160,523,2162,523,2165],{},[51,2161,1062],{},[51,2163,2164],{},"\u002Frevoke",[51,2166,2167],{},"\u002Fintrospect",[248,2169,2170],{},"120 requests per minute, per IP",[231,2172,2173,2179],{},[248,2174,2175,523,2177],{},[51,2176,857],{},[51,2178,374],{},[248,2180,2181],{},"15 requests per minute, per IP",[231,2183,2184,2187],{},[248,2185,2186],{},"Discovery documents",[248,2188,2189],{},"no limit, cached 5 minutes",[1032,2191,2192,2214],{},[211,2193,2194,2197,2198,2201,2202,2205,2206,2209,2210,2213],{},[215,2195,2196],{},"Expiry is a per-client setting."," A client registered from the dashboard can turn ",[549,2199,2200],{},"Expire access tokens"," off — then its access token has no expiry, no ",[51,2203,2204],{},"expires_in"," is returned, and ",[215,2207,2208],{},"no refresh token is issued",", since refresh exists to renew what expires. Dynamic registration (",[377,2211,382],{"href":379,"rel":2212},[381],") cannot set it: a client that registers itself always gets expiring tokens.",[211,2215,2216,2217,2220,2221,2223,2224,2227],{},"With expiry off, revoking is the only way to cut access — from ",[549,2218,2219],{},"Connected apps",", or ",[51,2222,1623],{},". Changing the setting affects ",[215,2225,2226],{},"new"," tokens; the ones already issued keep the lifetime they were born with.",[220,2229,2231],{"id":2230},"discovery","Discovery",[211,2233,2234],{},"Do not hardcode the endpoints. Both documents are public, need no credential, and are the supported way to find everything above:",[225,2236,2237,2247],{},[228,2238,2239],{},[231,2240,2241,2244],{},[234,2242,2243],{},"Document",[234,2245,2246],{},"Answers",[243,2248,2249,2265,2275],{},[231,2250,2251,2256],{},[248,2252,2253],{},[51,2254,2255],{},"\u002F.well-known\u002Foauth-authorization-server",[248,2257,2258,2259,523,2262],{},"issuer, every endpoint, supported scopes, grant types, ",[51,2260,2261],{},"code_challenge_methods_supported",[51,2263,2264],{},"prompt_values_supported",[231,2266,2267,2272],{},[248,2268,2269],{},[51,2270,2271],{},"\u002F.well-known\u002Foauth-protected-resource",[248,2273,2274],{},"the API as a whole, and which authorization server guards it",[231,2276,2277,2282],{},[248,2278,2279],{},[51,2280,2281],{},"\u002F.well-known\u002Foauth-protected-resource\u002Fv3\u002Fmcp",[248,2283,2284],{},"the MCP endpoint specifically, and only the scopes it uses",[2286,2287,2288],"tip",{},[211,2289,2290,2291,2293,2294,346,2296,387],{},"The first thing built on all of this is the ",[377,2292,63],{"href":62}," — an AI assistant connects with exactly this flow, and its page shows it end to end. For the API-key credential, see ",[377,2295,40],{"href":39},[377,2297,6],{"href":20},[2299,2300,2301],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":394,"searchDepth":433,"depth":433,"links":2303},[2304,2305,2306,2307,2309,2310,2311,2312,2313,2314,2315,2321,2322],{"id":222,"depth":422,"text":223},{"id":338,"depth":422,"text":339},{"id":368,"depth":422,"text":369},{"id":849,"depth":422,"text":2308},"2 — Send the person to \u002Fauthorize",{"id":1056,"depth":422,"text":1057},{"id":1227,"depth":422,"text":1228},{"id":1313,"depth":422,"text":1314},{"id":1405,"depth":422,"text":1406},{"id":1578,"depth":422,"text":1579},{"id":1595,"depth":422,"text":1596},{"id":1667,"depth":422,"text":1668,"children":2316},[2317,2318,2320],{"id":1675,"depth":433,"text":1676},{"id":1913,"depth":433,"text":2319},"On your redirect_uri",{"id":1981,"depth":433,"text":1982},{"id":2106,"depth":422,"text":2107},{"id":2230,"depth":422,"text":2231},"md",{},true,{"title":68,"description":69},"en\u002Foauth","upqpcZ-sF4CXDkDwb0jKl-bXaNm-k94GwA8wHr8Hqck",{"left":160,"top":160,"width":161,"height":161,"rotate":160,"vFlip":162,"hFlip":162,"body":2330},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m15 18l-6-6l6-6\"\u002F>",{"left":160,"top":160,"width":166,"height":166,"rotate":160,"vFlip":162,"hFlip":162,"body":2332},"\u003Cpath fill=\"currentColor\" d=\"M256 512a256 256 0 1 0 0-512a256 256 0 1 0 0 512m0-384c13.3 0 24 10.7 24 24v112c0 13.3-10.7 24-24 24s-24-10.7-24-24V152c0-13.3 10.7-24 24-24m-32 224a32 32 0 1 1 64 0a32 32 0 1 1-64 0\"\u002F>",{"left":160,"top":160,"width":166,"height":166,"rotate":160,"vFlip":162,"hFlip":162,"body":2334},"\u003Cpath fill=\"currentColor\" d=\"M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7.2 40.1S486.3 480 472 480H40c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8.2-40.1l216-368C228.7 39.5 241.8 32 256 32m0 128c-13.3 0-24 10.7-24 24v112c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24m32 224a32 32 0 1 0-64 0a32 32 0 1 0 64 0\"\u002F>",{"left":160,"top":160,"width":161,"height":161,"rotate":160,"vFlip":162,"hFlip":162,"body":2336},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fg>",{"left":160,"top":160,"width":166,"height":166,"rotate":160,"vFlip":162,"hFlip":162,"body":2338},"\u003Cpath fill=\"currentColor\" d=\"M256 512a256 256 0 1 0 0-512a256 256 0 1 0 0 512m-40-176h24v-64h-24c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24h-80c-13.3 0-24-10.7-24-24s10.7-24 24-24m40-208a32 32 0 1 1 0 64a32 32 0 1 1 0-64\"\u002F>",{"left":160,"top":160,"width":2340,"height":166,"rotate":160,"vFlip":162,"hFlip":162,"body":2341},384,"\u003Cpath fill=\"currentColor\" d=\"M272 384c9.6-31.9 29.5-59.1 49.2-86.2c5.2-7.1 10.4-14.2 15.4-21.4c19.8-28.5 31.4-63 31.4-100.3C368 78.8 289.2 0 192 0S16 78.8 16 176c0 37.3 11.6 71.9 31.4 100.3c5 7.2 10.2 14.3 15.4 21.4c19.8 27.1 39.7 54.4 49.2 86.2h160zm-80 128c44.2 0 80-35.8 80-80v-16H112v16c0 44.2 35.8 80 80 80m-80-336c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-61.9 50.1-112 112-112c8.8 0 16 7.2 16 16s-7.2 16-16 16c-44.2 0-80 35.8-80 80\"\u002F>",1788888920483]