[{"data":1,"prerenderedAt":747},["ShallowReactive",2],{"navigation":3,"\u002Fdata-connectors\u002Fbuild-a-connector":246,"\u002Fdata-connectors\u002Fbuild-a-connector-surround":742},[4,30,61,96,136,171,196,226],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":29},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15,20,25],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Add Clarify","\u002Fgetting-started\u002Fadd-clarify","1.getting-started\u002F2.add-clarify","i-lucide-bot",{"title":21,"path":22,"stem":23,"icon":24},"Dashboard tour","\u002Fgetting-started\u002Fdashboard-tour","1.getting-started\u002F3.dashboard-tour","i-lucide-compass",{"title":26,"path":27,"stem":28,"icon":6},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F4.quickstart",false,{"title":31,"icon":32,"path":33,"stem":34,"children":35,"page":29},"Core concepts","i-lucide-lightbulb","\u002Fconcepts","2.concepts",[36,41,46,51,56],{"title":37,"path":38,"stem":39,"icon":40},"How Clarify works","\u002Fconcepts\u002Fhow-clarify-works","2.concepts\u002F1.how-clarify-works","i-lucide-git-compare-arrows",{"title":42,"path":43,"stem":44,"icon":45},"Tickets & delivery modes","\u002Fconcepts\u002Ftickets-and-modes","2.concepts\u002F2.tickets-and-modes","i-lucide-ticket",{"title":47,"path":48,"stem":49,"icon":50},"Categories & ticket fields","\u002Fconcepts\u002Fcategories-and-inputs","2.concepts\u002F3.categories-and-inputs","i-lucide-tags",{"title":52,"path":53,"stem":54,"icon":55},"Cards & placeholders","\u002Fconcepts\u002Fcards-and-placeholders","2.concepts\u002F4.cards-and-placeholders","i-lucide-layout-panel-left",{"title":57,"path":58,"stem":59,"icon":60},"Roles & permissions","\u002Fconcepts\u002Froles-and-permissions","2.concepts\u002F5.roles-and-permissions","i-lucide-user-cog",{"title":62,"icon":63,"path":64,"stem":65,"children":66,"page":29},"Configuration","i-lucide-sliders-horizontal","\u002Fconfiguration","3.configuration",[67,72,77,81,86,91],{"title":68,"path":69,"stem":70,"icon":71},"Onboarding","\u002Fconfiguration\u002Fonboarding","3.configuration\u002F1.onboarding","i-lucide-wand-sparkles",{"title":73,"path":74,"stem":75,"icon":76},"General settings","\u002Fconfiguration\u002Fgeneral-settings","3.configuration\u002F2.general-settings","i-lucide-settings",{"title":78,"path":79,"stem":80,"icon":50},"Categories","\u002Fconfiguration\u002Fcategories","3.configuration\u002F3.categories",{"title":82,"path":83,"stem":84,"icon":85},"Ticket inputs","\u002Fconfiguration\u002Fticket-inputs","3.configuration\u002F4.ticket-inputs","i-lucide-form-input",{"title":87,"path":88,"stem":89,"icon":90},"Panels","\u002Fconfiguration\u002Fpanels","3.configuration\u002F5.panels","i-lucide-panel-top",{"title":92,"path":93,"stem":94,"icon":95},"White label (your own bot)","\u002Fconfiguration\u002Fwhite-label","3.configuration\u002F6.white-label","i-lucide-badge-check",{"title":97,"icon":98,"path":99,"stem":100,"children":101,"page":29},"Modules","i-lucide-blocks","\u002Fmodules","4.modules",[102,106,111,116,121,126,131],{"title":103,"path":104,"stem":105,"icon":98},"Modules overview","\u002Fmodules\u002Foverview","4.modules\u002F1.overview",{"title":107,"path":108,"stem":109,"icon":110},"Transcripts","\u002Fmodules\u002Ftranscripts","4.modules\u002F2.transcripts","i-lucide-file-text",{"title":112,"path":113,"stem":114,"icon":115},"Feedback","\u002Fmodules\u002Ffeedback","4.modules\u002F3.feedback","i-lucide-star",{"title":117,"path":118,"stem":119,"icon":120},"Escalation","\u002Fmodules\u002Fescalation","4.modules\u002F4.escalation","i-lucide-siren",{"title":122,"path":123,"stem":124,"icon":125},"Opening hours","\u002Fmodules\u002Fopening-hours","4.modules\u002F5.opening-hours","i-lucide-clock",{"title":127,"path":128,"stem":129,"icon":130},"Webhooks","\u002Fmodules\u002Fwebhooks","4.modules\u002F6.webhooks","i-lucide-webhook",{"title":132,"path":133,"stem":134,"icon":135},"Assignment","\u002Fmodules\u002Fassignment","4.modules\u002F7.assignment","i-lucide-user-check",{"title":137,"icon":138,"path":139,"stem":140,"children":141,"page":29},"Integrations","i-lucide-plug","\u002Fintegrations","5.integrations",[142,146,151,156,161,166],{"title":143,"path":144,"stem":145,"icon":138},"Integrations overview","\u002Fintegrations\u002Foverview","5.integrations\u002F1.overview",{"title":147,"path":148,"stem":149,"icon":150},"Stripe","\u002Fintegrations\u002Fstripe","5.integrations\u002F2.stripe","i-simple-icons-stripe",{"title":152,"path":153,"stem":154,"icon":155},"PayPal","\u002Fintegrations\u002Fpaypal","5.integrations\u002F3.paypal","i-simple-icons-paypal",{"title":157,"path":158,"stem":159,"icon":160},"Tebex","\u002Fintegrations\u002Ftebex","5.integrations\u002F4.tebex","i-lucide-shopping-cart",{"title":162,"path":163,"stem":164,"icon":165},"Patreon","\u002Fintegrations\u002Fpatreon","5.integrations\u002F5.patreon","i-simple-icons-patreon",{"title":167,"path":168,"stem":169,"icon":170},"GitHub","\u002Fintegrations\u002Fgithub","5.integrations\u002F6.github","i-simple-icons-github",{"title":172,"icon":173,"path":174,"stem":175,"children":176,"page":29},"Data connectors","i-lucide-share-2","\u002Fdata-connectors","6.data-connectors",[177,181,186,191],{"title":178,"path":179,"stem":180,"icon":173},"Data connectors overview","\u002Fdata-connectors\u002Foverview","6.data-connectors\u002F1.overview",{"title":182,"path":183,"stem":184,"icon":185},"Build a connector","\u002Fdata-connectors\u002Fbuild-a-connector","6.data-connectors\u002F2.build-a-connector","i-lucide-wrench",{"title":187,"path":188,"stem":189,"icon":190},"Discord auto-detect","\u002Fdata-connectors\u002Fdiscord-auto-detect","6.data-connectors\u002F3.discord-auto-detect","i-lucide-scan-face",{"title":192,"path":193,"stem":194,"icon":195},"Connector security","\u002Fdata-connectors\u002Fsecurity","6.data-connectors\u002F4.security","i-lucide-shield",{"title":197,"icon":198,"path":199,"stem":200,"children":201,"page":29},"Security & trust","i-lucide-shield-check","\u002Fsecurity","7.security",[202,206,211,216,221],{"title":203,"path":204,"stem":205,"icon":198},"Security overview","\u002Fsecurity\u002Foverview","7.security\u002F1.overview",{"title":207,"path":208,"stem":209,"icon":210},"Encryption & secrets","\u002Fsecurity\u002Fencryption","7.security\u002F2.encryption","i-lucide-lock",{"title":212,"path":213,"stem":214,"icon":215},"The relay & your privacy","\u002Fsecurity\u002Fthe-middleman","7.security\u002F3.the-middleman","i-lucide-eye-off",{"title":217,"path":218,"stem":219,"icon":220},"Access & permissions","\u002Fsecurity\u002Faccess-control","7.security\u002F4.access-control","i-lucide-key-round",{"title":222,"path":223,"stem":224,"icon":225},"Data & retention","\u002Fsecurity\u002Fdata-and-retention","7.security\u002F5.data-and-retention","i-lucide-database",{"title":227,"icon":228,"path":229,"stem":230,"children":231,"page":29},"Reference","i-lucide-book-open","\u002Freference","8.reference",[232,237,241],{"title":233,"path":234,"stem":235,"icon":236},"FAQ","\u002Freference\u002Ffaq","8.reference\u002F1.faq","i-lucide-circle-help",{"title":238,"path":239,"stem":240,"icon":185},"Troubleshooting","\u002Freference\u002Ftroubleshooting","8.reference\u002F2.troubleshooting",{"title":242,"path":243,"stem":244,"icon":245},"Glossary","\u002Freference\u002Fglossary","8.reference\u002F3.glossary","i-lucide-book-a",{"id":247,"title":182,"body":248,"description":735,"extension":736,"links":737,"meta":738,"navigation":739,"path":183,"seo":740,"stem":184,"__hash__":741},"docs\u002F6.data-connectors\u002F2.build-a-connector.md",{"type":249,"value":250,"toc":727},"minimark",[251,260,271,276,634,638,641,667,676,680,686,694,698],[252,253,254,255,259],"p",{},"A ",[256,257,258],"strong",{},"data connector"," pulls information from your own shop, CRM or API and shows it to your team, right on the ticket — no code. You build one in a short guided flow: name it, tell Clarify how to sign in, define a request, run a test call, then click the response fields you want to show. This page walks through every step.",[261,262,263],"note",{},[252,264,265,266,270],{},"New to connectors? Read the ",[267,268,269],"a",{"href":179},"overview"," first for what they are and when to use one.",[272,273,275],"h2",{"id":274},"build-a-connector-step-by-step","Build a connector step by step",[277,278,280,285,288,330,334,341,439,464,468,471,522,535,539,546,554,558,585,592,596,599,625],"steps",{"level":279},"3",[281,282,284],"h3",{"id":283},"basics","Basics",[252,286,287],{},"Give your connector its identity. These settings decide how it looks in the dashboard and on the ticket.",[289,290,291,299,317,323],"field-group",{},[292,293,296],"field",{"name":294,"type":295},"Name","text",[252,297,298],{},"A short, human name for this connector — for example \"My Shop\" or \"CRM\". Shown to your team wherever the connector appears.",[292,300,302],{"name":301,"type":295},"Base URL",[252,303,304,305,309,310,316],{},"The root address of your API, for example ",[306,307,308],"code",{},"https:\u002F\u002Fapi.myshop.com",". ",[256,311,312,313],{},"Must start with ",[306,314,315],{},"https:\u002F\u002F"," — Clarify only talks to public, secure endpoints. You add the specific path for each request in a later step.",[292,318,320],{"name":319,"type":295},"Icon",[252,321,322],{},"An icon to represent the connector in lists and cards. Optional.",[292,324,327],{"name":325,"type":326},"Accent colour","color",[252,328,329],{},"A colour used to highlight the connector's card and badges. Optional.",[281,331,333],{"id":332},"authentication","Authentication",[252,335,336,337,340],{},"Tell Clarify how to sign in to your API. Pick the one type your provider uses — the fields change to match it. Whatever you enter here is ",[256,338,339],{},"encrypted before it's stored"," and is never shown back to you in full.",[289,342,343,350,380,398,411],{},[292,344,347],{"name":345,"type":346},"None","radio",[252,348,349],{},"No sign-in. Use this for public endpoints that need no key or token.",[292,351,353],{"name":352,"type":346},"API key",[252,354,355,356,359,360,363,364,367,368,371,372,375,376,379],{},"A single secret key. Choose whether Clarify sends it as a ",[256,357,358],{},"header"," or a ",[256,361,362],{},"query parameter",", then enter the ",[256,365,366],{},"name"," (for example ",[306,369,370],{},"X-API-Key"," or ",[306,373,374],{},"api_key",") and the ",[256,377,378],{},"value"," (your key). The value is encrypted.",[292,381,383],{"name":382,"type":346},"Bearer token",[252,384,385,386,389,390,393,394,397],{},"A token sent in the ",[306,387,388],{},"Authorization"," header as ",[306,391,392],{},"Bearer \u003Ctoken>",". Paste the ",[256,395,396],{},"token"," — it's encrypted at rest.",[292,399,401],{"name":400,"type":346},"Basic auth",[252,402,254,403,406,407,410],{},[256,404,405],{},"username"," and ",[256,408,409],{},"password"," pair sent using HTTP Basic authentication. Both are encrypted.",[292,412,414],{"name":413,"type":346},"OAuth2",[252,415,416,417,406,420,423,424,406,427,430,431,434,435,438],{},"For providers that use OAuth. Enter the ",[256,418,419],{},"authorize URL",[256,421,422],{},"token URL"," (from your provider's docs), your ",[256,425,426],{},"client ID",[256,428,429],{},"client secret",", and the ",[256,432,433],{},"scopes"," you need. Optionally turn on ",[256,436,437],{},"PKCE (S256)"," for extra protection. The client secret and the tokens Clarify mints for you are all encrypted server-side.",[440,441,442,452,461],"caution",{},[252,443,444,445,447,448,451],{},"For ",[256,446,413],{},", register this exact ",[256,449,450],{},"redirect URI"," on your provider so the sign-in can complete:",[453,454,458],"pre",{"className":455,"code":457,"language":295},[456],"language-text","https:\u002F\u002Fapi.clarify.bot\u002Fconnectors\u002Foauth\u002Fcallback\n",[306,459,457],{"__ignoreMap":460},"",[252,462,463],{},"Add it to your provider's allowed redirect\u002Fcallback URLs before you connect. Tokens are exchanged and encrypted on Clarify's servers — they never pass through your browser.",[281,465,467],{"id":466},"first-operation","First operation",[252,469,470],{},"Define the request Clarify will send to fetch data.",[289,472,473,500,510,516],{},[292,474,477],{"name":475,"type":476},"Method","select",[252,478,479,480,483,484,483,487,483,490,371,493,496,497,499],{},"The HTTP method: ",[306,481,482],{},"GET",", ",[306,485,486],{},"POST",[306,488,489],{},"PUT",[306,491,492],{},"PATCH",[306,494,495],{},"DELETE",". Most lookups are ",[306,498,482],{},".",[292,501,503],{"name":502,"type":295},"Path",[252,504,505,506,509],{},"The path added to your base URL, for example ",[306,507,508],{},"\u002Fcustomers\u002F{id}",". Together they form the full request URL.",[292,511,513],{"name":512,"type":295},"Query, headers, body",[252,514,515],{},"Any extra query parameters, request headers or request body the endpoint needs. Fill in only what your API requires.",[292,517,519],{"name":518,"type":295},"Declared inputs",[252,520,521],{},"The values the request needs at run time — for example an order ID or email. You declare each one here so Clarify can slot it into the path, query or body. These become the fields your team (or a ticket) supplies when the connector runs.",[523,524,525],"tip",{},[252,526,527,528,531,532,534],{},"Use a declared input inside the path or query — for example ",[306,529,530],{},"\u002Fcustomers\u002F{email}"," — and Clarify fills it in from the ticket or from ",[267,533,187],{"href":188}," each time.",[281,536,538],{"id":537},"test-call","Test call",[252,540,541,542,545],{},"Run the request straight from the builder. Clarify sends a real call to your API and shows you the ",[256,543,544],{},"live JSON response"," it gets back. This confirms your base URL, authentication and path all work before you go further — and it gives you the actual field names to map in the next step.",[261,547,548],{},[252,549,550,551,499],{},"Connectors can only reach real, public endpoints and responses are size-capped, so a test call is always safe. See ",[267,552,553],{"href":193},"connector security",[281,555,557],{"id":556},"map-fields","Map fields",[252,559,560,561,564,565,570,571,574,575,406,578,581,582,499],{},"Turn the response into something your team can read. In the live JSON from your test call, ",[256,562,563],{},"click the fields you want to show"," — each one becomes a ",[256,566,567],{},[306,568,569],{},"%placeholder%"," token you can drop into the ticket card. For example, a ",[306,572,573],{},"status"," field becomes ",[306,576,577],{},"%status%",[306,579,580],{},"total"," becomes ",[306,583,584],{},"%total%",[252,586,587,588,591],{},"Those placeholders fill the connector's ",[267,589,590],{"href":53},"card",", so when the connector runs on a ticket, your team sees the real values in a clean card instead of raw JSON.",[281,593,595],{"id":594},"make-it-usable","Make it usable",[252,597,598],{},"Decide when and where the connector runs.",[289,600,601,612,619],{},[292,602,605],{"name":603,"type":604},"Bind to a ticket field","toggle",[252,606,607,608,611],{},"Link a declared input to a ",[267,609,610],{"href":83},"ticket input"," so the value the member typed (an order ID, an email) is passed straight into the connector.",[292,613,614],{"name":187,"type":604},[252,615,616,617,499],{},"Resolve an input from the member's Discord account automatically — no typing needed. See ",[267,618,187],{"href":188},[292,620,622],{"name":621,"type":604},"Auto-run on open",[252,623,624],{},"Run the connector automatically as soon as the ticket opens, so the card is ready and waiting when your team arrives.",[252,626,627,628,630,631,499],{},"You link a connector to a category on the ",[267,629,78],{"href":79}," page under ",[256,632,633],{},"Connector Bindings",[272,635,637],{"id":636},"managing-a-connector","Managing a connector",[252,639,640],{},"Once a connector is saved, these controls keep it healthy and organised.",[289,642,643,649,655,661],{},[292,644,646],{"name":645,"type":604},"Last-call health badge",[252,647,648],{},"A badge shows how the connector's most recent call went — whether it succeeded or ran into a problem — so you can spot a broken connection at a glance.",[292,650,652],{"name":651,"type":604},"Active",[252,653,654],{},"Turn the connector on or off. When it's off, it won't run on tickets, but its setup is kept so you can switch it back on later.",[292,656,658],{"name":657,"type":604},"Duplicate",[252,659,660],{},"Copy an existing connector as a starting point — handy when a second endpoint shares the same base URL and sign-in.",[292,662,664],{"name":663,"type":604},"Delete",[252,665,666],{},"Remove a connector for good. You must keep at least one connector, so the last one can't be deleted.",[668,669,670],"warning",{},[252,671,672,673,675],{},"Deleting a connector is permanent and can't be undone. Turn off ",[256,674,651],{}," instead if you only want to pause it.",[272,677,679],{"id":678},"your-credentials-stay-private","Your credentials stay private",[252,681,682,683,685],{},"Every key, token and password you enter — API keys, bearer tokens, Basic passwords, OAuth client secrets and the tokens Clarify mints for you — is ",[256,684,339],{}," and never shown back to you in full. When you edit a connector, secret fields appear blank; leave them blank to keep the stored value.",[523,687,688],{"to":208},[252,689,690,691,499],{},"See exactly how your connector credentials are protected in ",[267,692,693],{"href":208},"Encryption",[272,695,697],{"id":696},"related","Related",[699,700,701,707,713,718],"card-group",{},[590,702,704],{"icon":173,"title":703,"to":179},"Connectors overview",[252,705,706],{},"What data connectors are and when to use one.",[590,708,710],{"icon":709,"title":187,"to":188},"i-lucide-user-search",[252,711,712],{},"Fill a connector input from the member's Discord account, automatically.",[590,714,715],{"icon":198,"title":192,"to":193},[252,716,717],{},"Why user-supplied URLs are safe: no internal addresses, no redirects, size caps.",[590,719,721],{"icon":720,"title":52,"to":53},"i-lucide-square-dashed-mouse-pointer",[252,722,723,724,726],{},"How ",[306,725,569],{}," tokens turn response data into a ticket card.",{"title":460,"searchDepth":728,"depth":729,"links":730},1,2,[731,732,733,734],{"id":274,"depth":729,"text":275},{"id":636,"depth":729,"text":637},{"id":678,"depth":729,"text":679},{"id":696,"depth":729,"text":697},"Step-by-step guide to building a data connector — from base URL and authentication to mapping response fields onto your ticket cards.","md",null,{},{"icon":185},{"title":182,"description":735},"T8jHmn_0KJf8-sOhcABmgEKpMgEvh2i5yLWzHugg1kM",[743,745],{"title":178,"path":179,"stem":180,"description":744,"icon":173,"children":-1},"Connect your own shop, CRM, licence server or any HTTP API and show its data to your team on the ticket — no code.",{"title":187,"path":188,"stem":189,"description":746,"icon":190,"children":-1},"Show a member's own record on their ticket automatically — using their Discord ID, with nothing for them to type.",1792666276348]