1import{j as e}from"./vendor-query-CoKCXE9e.js";import"./vendor-react-NJLRjSjs.js";function t(s){const n={a:"a",h1:"h1",h2:"h2",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...s.components};return e.jsxs(e.Fragment,{children:[e.jsx(n.h1,{children:"Troubleshooting Promotions & Toast"}),` 2`,e.jsx(n.p,{children:"Running into something unexpected? This brief covers the most common issues with promotions and the Toast integration, along with quick fixes."}),` 3`,e.jsx(n.h2,{children:"Toast connection issues"}),` 4`,e.jsx(n.h3,{children:'"Not Connected" after authorizing'}),` 5`,e.jsxs(n.p,{children:[e.jsx(n.strong,{children:"Symptom:"}),' You went through the Toast login flow but the card still shows gray "Not Connected."']}),` 6`,e.jsx(n.p,{children:e.jsx(n.strong,{children:"Fix:"})}),` 7`,e.jsxs(n.ol,{children:[` 8`,e.jsx(n.li,{children:"Check your browser â pop-up blockers can interrupt the OAuth redirect. Disable them for dragoncandy.com and try again."}),` 9`,e.jsxs(n.li,{children:["Make sure you authorized with a Toast ",e.jsx(n.strong,{children:"admin"})," account. Manager-level credentials may not have API permission."]}),` 10`,e.jsx(n.li,{children:"Try a different browser or clear cookies for toast.com and dragoncandy.com."}),` 11`]}),` 12`,e.jsx(n.h3,{children:'Status shows "Error" or "Expired"'}),` 13`,e.jsxs(n.p,{children:[e.jsx(n.strong,{children:"Symptom:"}),' The Toast card has a red "Error" or orange "Expired" pill.']}),` 14`,e.jsx(n.p,{children:e.jsx(n.strong,{children:"Fix:"})}),` 15`,e.jsxs(n.ul,{children:[` 16`,e.jsxs(n.li,{children:[e.jsx(n.strong,{children:"Error:"})," Usually a temporary Toast API outage. Wait 10 minutes and click ",e.jsx(n.strong,{children:"Test Connection"}),". If it persists, disconnect and reconnect."]}),` 17`,e.jsxs(n.li,{children:[e.jsx(n.strong,{children:"Expired:"})," Your access token expired and the automatic refresh failed. Click ",e.jsx(n.strong,{children:"Connect Toast"})," again to re-authorize. This takes 30 seconds and won't lose your historical data."]}),` 18`]}),` 19`,e.jsx(n.h3,{children:'"Test Connection" fails on webhook registration'}),` 20`,e.jsxs(n.p,{children:[e.jsx(n.strong,{children:"Symptom:"})," Menu items and orders load fine, but the webhook line shows â."]}),` 21`,e.jsxs(n.p,{children:[e.jsx(n.strong,{children:"Fix:"})," This is usually a Toast-side delay in registering new webhook endpoints. Wait 15 minutes and test again. If it still fails after an hour, contact support â there may be a firewall rule on Toast's side blocking outbound webhook calls to your endpoint."]}),` 22`,e.jsx(n.h2,{children:"Promotion issues"}),` 23`,e.jsx(n.h3,{children:'Customers see "This promotion is no longer active"'}),` 24`,e.jsx(n.p,{children:e.jsx(n.strong,{children:"Possible causes:"})}),` 25`,e.jsxs(n.ul,{children:[` 26`,e.jsx(n.li,{children:"The promotion's end date has passed â check the date range in your promotion settings"}),` 27`,e.jsx(n.li,{children:"You manually paused or ended the promotion"}),` 28`,e.jsx(n.li,{children:'The status was changed to "draft" or "closed"'}),` 29`]}),` 30`,e.jsxs(n.p,{children:[e.jsx(n.strong,{children:"Fix:"}),' Edit the promotion and extend the end date, or set status back to "active."']}),` 31`,e.jsx(n.h3,{children:"Discount code not arriving"}),` 32`,e.jsxs(n.p,{children:[e.jsx(n.strong,{children:"Symptom:"})," You approved the submission but the customer says they never got a code."]}),` 33`,e.jsx(n.p,{children:e.jsx(n.strong,{children:"Check:"})}),` 34`,e.jsxs(n.ol,{children:[` 35`,e.jsxs(n.li,{children:["Open the ",e.jsx(n.strong,{children:"Codes"})," tab and search by the customer's email â if the code exists, it was generated successfully"]}),` 36`,e.jsx(n.li,{children:"Ask the customer to check spam/junk folders (email) or blocked messages (SMS)"}),` 37`,e.jsx(n.li,{children:"Verify the email and phone on the submission are correct â typos happen"}),` 38`]}),` 39`,e.jsx(n.p,{children:"If the code doesn't exist at all, there may have been a generation error. Try rejecting and re-approving the submission, which triggers a fresh code."}),` 40`,e.jsx(n.h3,{children:"Duplicate submission blocked but customer is new"}),` 41`,e.jsxs(n.p,{children:[e.jsx(n.strong,{children:"Symptom:"}),` A customer says they've never submitted but gets the "already submitted" error.`]}),` 42`,e.jsxs(n.p,{children:[e.jsx(n.strong,{children:"Cause:"})," Someone else used the same email address or phone number for a prior submission on the same promotion."]}),` 43`,e.jsxs(n.p,{children:[e.jsx(n.strong,{children:"Fix:"})," This is by design to prevent code farming. If you trust the customer, you can manually create a discount code for them in the ",e.jsx(n.strong,{children:"Codes"})," tab."]}),` 44`,e.jsx(n.h2,{children:"Sync status issues"}),` 45`,e.jsx(n.h3,{children:'Badge shows "Tier-Unavailable"'}),` 46`,e.jsxs(n.p,{children:["This means your Toast integration is on ",e.jsx(n.strong,{children:"Standard"}
46)," access â discount codes work through DragonCandy but don't automatically sync to the Toast POS. This is normal and doesn't affect the customer experience. Codes are still delivered via email/SMS and can be redeemed manually at the register."]}),` 47`,e.jsx(n.p,{children:"To enable automatic POS sync, ask your account manager about upgrading to Partner-tier integration."}),` 48`,e.jsx(n.h3,{children:'Badge shows "Pending" for a long time'}),` 49`,e.jsx(n.p,{children:'Sync events are fire-and-forget â if Toast is temporarily unreachable, the badge stays on "Pending" until the next successful sync. Usually resolves within 30 minutes. If it stays pending for more than an hour, check the Toast card status in Settings.'}),` 50`,e.jsx(n.h3,{children:'Badge shows "Failed"'}),` 51`,e.jsx(n.p,{children:"A sync attempt reached Toast but was rejected. Common causes:"}),` 52`,e.jsxs(n.ul,{children:[` 53`,e.jsx(n.li,{children:"The discount value exceeds Toast's configured maximum"}),` 54`,e.jsx(n.li,{children:"The promotion title contains characters Toast doesn't allow"}),` 55`,e.jsx(n.li,{children:"Toast's discount API had a transient error"}),` 56`]}),` 57`,e.jsx(n.p,{children:"Check the error in the sync event log (visible in the promotion detail page) and adjust accordingly."}),` 58`,e.jsx(n.h2,{children:"Still stuck?"}),` 59`,e.jsx(n.p,{children:'Tap the Donny icon and say "help me troubleshoot my Toast connection" â Donny can check your connection status and sync history in real time and walk you through the fix.'}),` 60`,e.jsxs(n.p,{children:["If it's something Donny can't resolve, reach out to ",e.jsx(n.a,{href:"mailto:[email protected]",children:"[email protected]"})," with your restaurant name and a screenshot of the error."]}),` 61`,e.jsx(n.hr,{}),` 62`,e.jsxs(n.p,{children:[e.jsx(n.strong,{children:"â Back to:"})," ",e.jsx(n.a,{href:"/help/promotions/connect-toast",children:"Connect Toast"})]})]})}function i(s={}){const{wrapper:n}=s.components||{};return n?e.jsx(n,{...s,children:e.jsx(t,{...s})}):t(s)}export{i as default}; 63//# sourceMappingURL=troubleshooting-DFxKP526.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.