[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"documentation:page:\u002Fdocumentation\u002Fintegrations\u002Fgithub":3,"documentation:nav":231},{"id":4,"title":5,"body":6,"category":220,"description":221,"extension":222,"meta":223,"navigation":224,"order":225,"path":226,"seo":227,"stem":228,"updated":229,"__hash__":230},"documentation\u002Fdocumentation\u002Fintegrations\u002Fgithub.md","GitHub integration",{"type":7,"value":8,"toc":209},"minimark",[9,13,18,26,49,53,60,77,81,84,88,95,99,102,106,113,152,155,202,206],[10,11,12],"p",{},"The GitHub integration turns bug reports into trackable GitHub issues without leaving the ticket, and keeps both sides in sync.",[14,15,17],"h2",{"id":16},"connecting-github","Connecting GitHub",[10,19,20,21,25],{},"The integration uses the ",[22,23,24],"strong",{},"Joely GitHub App",": you install it on the repositories you choose, with least-privilege scoped permissions, no personal access token involved. You then select which repositories are available for issue linking, and can re-fetch the list at any time.",[27,28,29,42],"ul",{},[30,31,32,33,37,38,41],"li",{},"Configuration requires the ",[34,35],"permission-label",{"permission":36},"integrations.github.configure"," permission; disconnecting requires ",[34,39],{"permission":40},"integrations.github.disconnect",".",[30,43,44,45,48],{},"A project can connect ",[22,46,47],{},"several GitHub accounts"," (personal and organizations) on eligible plans.",[14,50,52],{"id":51},"creating-an-issue-from-a-ticket","Creating an issue from a ticket",[10,54,55,56,59],{},"Staff with the ",[34,57],{"permission":58},"tickets.manage_github_issues"," permission can create a GitHub issue directly from a ticket:",[27,61,62,68,71],{},[30,63,64,67],{},[22,65,66],{},"AI drafts the issue",": title and description are generated from the ticket conversation, so the issue reads like a clean bug report instead of a chat log.",[30,69,70],{},"You pick the target repository among the ones you enabled.",[30,72,73,76],{},[22,74,75],{},"One issue per ticket",": a ticket is linked to at most one GitHub issue. To switch, unlink first.",[14,78,80],{"id":79},"linking-an-existing-issue","Linking an existing issue",[10,82,83],{},"If the bug is already tracked, link the ticket to the existing GitHub issue instead of creating a duplicate. Unlinking is always possible (same permission).",[14,85,87],{"id":86},"duplicate-detection","Duplicate detection",[10,89,90,91,94],{},"On eligible plans, AI compares new tickets against your ",[22,92,93],{},"open GitHub issues"," and flags probable duplicates, so a known bug reported by ten customers becomes one issue with ten linked conversations, not ten issues.",[14,96,98],{"id":97},"status-sync","Status sync",[10,100,101],{},"The link is live in both directions: changes to a linked GitHub issue (such as closing it) are reflected on the ticket in real time via webhooks. Support always knows whether the fix shipped without checking GitHub.",[14,103,105],{"id":104},"automatic-status-transitions","Automatic status transitions",[10,107,108,109,112],{},"When ",[22,110,111],{},"auto-update status from GitHub"," is enabled in the GitHub integration settings (off by default, per project), Joely advances linked tickets through their lifecycle as you work, following GitHub's recommended flow:",[27,114,115,139],{},[30,116,117,120,121,125,126,130,131,134,135,138],{},[22,118,119],{},"Issue closed as completed → Awaiting release."," When a linked issue is closed ",[122,123,124],"em",{},"as completed",", typically because a pull request with ",[127,128,129],"code",{},"Closes #123"," was merged, every ticket linked to it moves to ",[127,132,133],{},"Awaiting release",". Issues closed ",[122,136,137],{},"as not planned"," are ignored.",[30,140,141,144,145,147,148,151],{},[22,142,143],{},"Release published → Resolved."," When you publish a release on the repository, every ",[127,146,133],{}," ticket whose linked issue lives in that repository moves to ",[127,149,150],{},"Resolved",", which triggers the customer's satisfaction survey and Discord notification.",[10,153,154],{},"A few rules worth knowing:",[27,156,157,173,187,196],{},[30,158,159,162,163,165,166,169,170,172],{},[22,160,161],{},"It only ever moves tickets forward."," A ticket already ",[127,164,150],{}," or ",[127,167,168],{},"Closed"," is never pulled back to ",[127,171,133],{}," by a later issue event.",[30,174,175,178,179,182,183,186],{},[22,176,177],{},"It depends on the standard GitHub workflow."," If an issue is left open, closed without the ",[122,180,181],{},"completed"," reason, or never linked with ",[127,184,185],{},"Closes #N",", nothing happens; the signal simply never fires. You can always change the status manually.",[30,188,189,192,193,195],{},[22,190,191],{},"It is project-scoped."," The toggle requires the ",[34,194],{"permission":36}," permission and applies to that project only.",[30,197,198,201],{},[22,199,200],{},"Enabling is checked."," Turning the toggle on verifies that the connected GitHub App installation is actually subscribed to the Issues and Release events and holds the Contents permission. If it isn't, enabling is blocked with a prompt to re-approve the App, so the automation never silently does nothing.",[14,203,205],{"id":204},"package-to-repository-linking","Package-to-repository linking",[10,207,208],{},"You can map each Tebex package to the GitHub repository that contains its code. When a ticket is linked to a package, issue creation pre-targets the right repository. AI can suggest the best matching repository for each package, with batch auto-linking above a confidence threshold.",{"title":210,"searchDepth":211,"depth":211,"links":212},"",2,[213,214,215,216,217,218,219],{"id":16,"depth":211,"text":17},{"id":51,"depth":211,"text":52},{"id":79,"depth":211,"text":80},{"id":86,"depth":211,"text":87},{"id":97,"depth":211,"text":98},{"id":104,"depth":211,"text":105},{"id":204,"depth":211,"text":205},"integrations","Turn tickets into GitHub issues, link existing ones, and let AI flag duplicate reports, with real-time status sync and automatic ticket transitions.","md",{},true,3,"\u002Fdocumentation\u002Fintegrations\u002Fgithub",{"title":5,"description":221},"documentation\u002Fintegrations\u002Fgithub","2026-06-09","REPjGoykcJro5ZY0ZcQl1zU932vf_XoCFvcnlrUQyJM",[232,236,239,244,248,252,256,259,263,267,270,273,276,279,283,286,289,290,293,297,300],{"title":233,"path":234,"category":235,"order":235},"Customer portal","\u002Fdocumentation\u002Fportal\u002Foverview",null,{"title":237,"path":238,"category":235,"order":235},"Ticket lifecycle","\u002Fdocumentation\u002Ftickets\u002Flifecycle",{"title":240,"path":241,"category":242,"order":243},"Account & security","\u002Fdocumentation\u002Faccount\u002Fsecurity","account",1,{"title":245,"path":246,"category":247,"order":243},"AI assistant","\u002Fdocumentation\u002Fai\u002Fassistant","ai",{"title":249,"path":250,"category":251,"order":243},"CSAT surveys","\u002Fdocumentation\u002Fcsat","csat",{"title":253,"path":254,"category":255,"order":243},"Getting started","\u002Fdocumentation\u002Fgetting-started","getting-started",{"title":257,"path":258,"category":220,"order":243},"Tebex integration","\u002Fdocumentation\u002Fintegrations\u002Ftebex",{"title":260,"path":261,"category":262,"order":243},"Roles & permissions","\u002Fdocumentation\u002Fteam\u002Froles-permissions","team",{"title":264,"path":265,"category":266,"order":243},"Ticket statuses","\u002Fdocumentation\u002Ftickets\u002Fstatuses","tickets",{"title":268,"path":269,"category":242,"order":211},"Notifications","\u002Fdocumentation\u002Faccount\u002Fnotifications",{"title":271,"path":272,"category":247,"order":211},"AI knowledge base","\u002Fdocumentation\u002Fai\u002Fknowledge",{"title":274,"path":275,"category":220,"order":211},"Discord integration","\u002Fdocumentation\u002Fintegrations\u002Fdiscord",{"title":277,"path":278,"category":255,"order":211},"Plans & limits","\u002Fdocumentation\u002Fplans-limits",{"title":280,"path":281,"category":282,"order":211},"Portal customization","\u002Fdocumentation\u002Fportal\u002Fbranding","portal",{"title":284,"path":285,"category":262,"order":211},"Members & invitations","\u002Fdocumentation\u002Fteam\u002Fmembers-invitations",{"title":287,"path":288,"category":247,"order":225},"Writing AI-ready documentation","\u002Fdocumentation\u002Fai\u002Fwriting-ai-ready-docs",{"title":5,"path":226,"category":220,"order":225},{"title":291,"path":292,"category":266,"order":225},"Messages & conversation","\u002Fdocumentation\u002Ftickets\u002Fmessages",{"title":294,"path":295,"category":220,"order":296},"Tebex keys & security","\u002Fdocumentation\u002Fintegrations\u002Ftebex-keys",4,{"title":298,"path":299,"category":266,"order":296},"Configuring the ticket form","\u002Fdocumentation\u002Ftickets\u002Fconfiguration",{"title":301,"path":302,"category":220,"order":303},"Self-hosted Tebex Bridge","\u002Fdocumentation\u002Fintegrations\u002Ftebex-bridge",5]