[{"data":1,"prerenderedAt":674},["ShallowReactive",2],{"navigation_docs":3,"-developer-api":218,"-developer-api-surround":669},[4,20,45,75,95,105,140,168,198],{"title":5,"path":6,"stem":7,"children":8,"page":19},"Introduction","\u002Fintroduction","1.introduction",[9,14],{"title":10,"path":11,"stem":12,"icon":13},"What is GO?","\u002Fintroduction\u002Fwhat-is-go","1.introduction\u002F1.what-is-go","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Features","\u002Fintroduction\u002Ffeatures","1.introduction\u002F2.features","i-lucide-sparkles",false,{"title":21,"path":22,"stem":23,"children":24,"page":19},"Getting Started","\u002Fgetting-started","2.getting-started",[25,30,35,40],{"title":26,"path":27,"stem":28,"icon":29},"Installation","\u002Fgetting-started\u002Finstallation","2.getting-started\u002F1.installation","i-lucide-download",{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fgetting-started\u002Fconfiguration","2.getting-started\u002F2.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"First Setup","\u002Fgetting-started\u002Ffirst-setup","2.getting-started\u002F3.first-setup","i-lucide-rocket",{"title":41,"path":42,"stem":43,"icon":44},"Updating","\u002Fgetting-started\u002Fupdating","2.getting-started\u002F4.updating","i-lucide-refresh-cw",{"title":46,"icon":19,"path":47,"stem":48,"children":49,"page":19},"User Guide","\u002Fuser-guide","3.user-guide",[50,55,60,65,70],{"title":51,"path":52,"stem":53,"icon":54},"Creating a Short Link","\u002Fuser-guide\u002Fcreating-a-short-link","3.user-guide\u002F1.creating-a-short-link","i-lucide-link",{"title":56,"path":57,"stem":58,"icon":59},"Expiration","\u002Fuser-guide\u002Fexpiration","3.user-guide\u002F2.expiration","i-lucide-clock",{"title":61,"path":62,"stem":63,"icon":64},"Renewing Links","\u002Fuser-guide\u002Frenewing-links","3.user-guide\u002F3.renewing-links","i-lucide-repeat",{"title":66,"path":67,"stem":68,"icon":69},"Dashboard","\u002Fuser-guide\u002Fdashboard","3.user-guide\u002F4.dashboard","i-lucide-layout-dashboard",{"title":71,"path":72,"stem":73,"icon":74},"Analytics","\u002Fuser-guide\u002Fanalytics","3.user-guide\u002F5.analytics","i-lucide-bar-chart-3",{"title":76,"path":77,"stem":78,"children":79,"page":19},"Authentication","\u002Fauthentication","4.authentication",[80,85,90],{"title":81,"path":82,"stem":83,"icon":84},"Email Login","\u002Fauthentication\u002Femail-login","4.authentication\u002F1.email-login","i-lucide-mail",{"title":86,"path":87,"stem":88,"icon":89},"Google Login","\u002Fauthentication\u002Fgoogle-login","4.authentication\u002F2.google-login","i-lucide-globe",{"title":91,"path":92,"stem":93,"icon":94},"Firebase Setup","\u002Fauthentication\u002Ffirebase-setup","4.authentication\u002F3.firebase-setup","i-simple-icons-firebase",{"title":96,"path":97,"stem":98,"children":99,"page":19},"Captcha","\u002Fcaptcha","5.captcha",[100],{"title":101,"path":102,"stem":103,"icon":104},"Cloudflare Turnstile","\u002Fcaptcha\u002Fcloudflare-turnstile","5.captcha\u002F1.cloudflare-turnstile","i-simple-icons-cloudflare",{"title":106,"path":107,"stem":108,"children":109,"page":19},"Administration","\u002Fadministration","6.administration",[110,115,120,125,130,135],{"title":111,"path":112,"stem":113,"icon":114},"Admin Panel","\u002Fadministration\u002Fadmin-panel","6.administration\u002F1.admin-panel","i-lucide-shield",{"title":116,"path":117,"stem":118,"icon":119},"Users","\u002Fadministration\u002Fusers","6.administration\u002F2.users","i-lucide-users",{"title":121,"path":122,"stem":123,"icon":124},"Links","\u002Fadministration\u002Flinks","6.administration\u002F3.links","i-lucide-link-2",{"title":126,"path":127,"stem":128,"icon":129},"Reports","\u002Fadministration\u002Freports","6.administration\u002F4.reports","i-lucide-flag",{"title":131,"path":132,"stem":133,"icon":134},"Bans & Timeouts","\u002Fadministration\u002Fbans-and-timeouts","6.administration\u002F5.bans-and-timeouts","i-lucide-user-x",{"title":136,"path":137,"stem":138,"icon":139},"Audit Logs","\u002Fadministration\u002Faudit-logs","6.administration\u002F6.audit-logs","i-lucide-scroll",{"title":141,"path":142,"stem":143,"children":144,"page":19},"Deployment","\u002Fdeployment","7.deployment",[145,150,155,160,165],{"title":146,"path":147,"stem":148,"icon":149},"VPS Installation","\u002Fdeployment\u002Fvps-installation","7.deployment\u002F1.vps-installation","i-lucide-server",{"title":151,"path":152,"stem":153,"icon":154},"Environment Variables","\u002Fdeployment\u002Fenvironment-variables","7.deployment\u002F2.environment-variables","i-lucide-sliders",{"title":156,"path":157,"stem":158,"icon":159},"Cloudflare Tunnel","\u002Fdeployment\u002Fcloudflare-tunnel","7.deployment\u002F3.cloudflare-tunnel","i-lucide-network",{"title":161,"path":162,"stem":163,"icon":164},"Systemd","\u002Fdeployment\u002Fsystemd","7.deployment\u002F4.systemd","i-lucide-cpu",{"title":41,"path":166,"stem":167,"icon":44},"\u002Fdeployment\u002Fupdating","7.deployment\u002F5.updating",{"title":169,"path":170,"stem":171,"children":172,"page":19},"Developer","\u002Fdeveloper","8.developer",[173,178,183,188,193],{"title":174,"path":175,"stem":176,"icon":177},"Architecture","\u002Fdeveloper\u002Farchitecture","8.developer\u002F1.architecture","i-lucide-box",{"title":179,"path":180,"stem":181,"icon":182},"API Architecture","\u002Fdeveloper\u002Fapi","8.developer\u002F2.api","i-lucide-code-xml",{"title":184,"path":185,"stem":186,"icon":187},"Database","\u002Fdeveloper\u002Fdatabase","8.developer\u002F3.database","i-lucide-database",{"title":189,"path":190,"stem":191,"icon":192},"Development","\u002Fdeveloper\u002Fdevelopment","8.developer\u002F4.development","i-lucide-terminal",{"title":194,"path":195,"stem":196,"icon":197},"Building Releases","\u002Fdeveloper\u002Fbuilding-releases","8.developer\u002F5.building-releases","i-lucide-package-check",{"title":199,"path":200,"stem":201,"children":202,"page":19},"Reference","\u002Freference","9.reference",[203,208,213],{"title":204,"path":205,"stem":206,"icon":207},"Configuration Reference","\u002Freference\u002Fconfiguration","9.reference\u002F1.configuration","i-lucide-file-cog",{"title":209,"path":210,"stem":211,"icon":212},"API Reference","\u002Freference\u002Fapi-reference","9.reference\u002F2.api-reference","i-lucide-webhook",{"title":214,"path":215,"stem":216,"icon":217},"Changelog","\u002Freference\u002Fchangelog","9.reference\u002F3.changelog","i-lucide-history",{"id":219,"title":179,"body":220,"description":660,"extension":661,"links":662,"meta":663,"navigation":664,"path":180,"seo":665,"stem":181,"__hash__":668},"docs\u002F8.developer\u002F2.api.md",{"type":221,"value":222,"toc":652},"minimark",[223,227,236,239,244,249,252,387,391,394,425,427,431,588,590,594,600,648],[224,225,179],"h1",{"id":226},"api-architecture",[228,229,230,231,235],"p",{},"The GO Shortener backend exposes a clean, synchronous JSON REST API under the ",[232,233,234],"code",{},"\u002Fapi"," namespace.",[237,238],"hr",{},[240,241,243],"h2",{"id":242},"response-serialization-standards","Response Serialization Standards",[245,246,248],"h3",{"id":247},"success-envelope","Success Envelope",[228,250,251],{},"Endpoints returning data deliver pure JSON with an appropriate HTTP 200 or 201 status code:",[253,254,259],"pre",{"className":255,"code":256,"language":257,"meta":258,"style":258},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"short_code\": \"K8xP2q\",\n  \"short_url\": \"https:\u002F\u002Fgo.arcn.online\u002FK8xP2q\",\n  \"destination_url\": \"https:\u002F\u002Fgithub.com\u002FItsARCn\u002FGo-shortner\",\n  \"expires_at\": \"2026-09-10T14:30:00Z\",\n  \"created_at\": \"2026-09-03T14:30:00Z\"\n}\n","json","",[232,260,261,270,298,319,340,361,381],{"__ignoreMap":258},[262,263,266],"span",{"class":264,"line":265},"line",1,[262,267,269],{"class":268},"sMK4o","{\n",[262,271,273,276,280,283,286,289,293,295],{"class":264,"line":272},2,[262,274,275],{"class":268},"  \"",[262,277,279],{"class":278},"spNyl","short_code",[262,281,282],{"class":268},"\"",[262,284,285],{"class":268},":",[262,287,288],{"class":268}," \"",[262,290,292],{"class":291},"sfazB","K8xP2q",[262,294,282],{"class":268},[262,296,297],{"class":268},",\n",[262,299,301,303,306,308,310,312,315,317],{"class":264,"line":300},3,[262,302,275],{"class":268},[262,304,305],{"class":278},"short_url",[262,307,282],{"class":268},[262,309,285],{"class":268},[262,311,288],{"class":268},[262,313,314],{"class":291},"https:\u002F\u002Fgo.arcn.online\u002FK8xP2q",[262,316,282],{"class":268},[262,318,297],{"class":268},[262,320,322,324,327,329,331,333,336,338],{"class":264,"line":321},4,[262,323,275],{"class":268},[262,325,326],{"class":278},"destination_url",[262,328,282],{"class":268},[262,330,285],{"class":268},[262,332,288],{"class":268},[262,334,335],{"class":291},"https:\u002F\u002Fgithub.com\u002FItsARCn\u002FGo-shortner",[262,337,282],{"class":268},[262,339,297],{"class":268},[262,341,343,345,348,350,352,354,357,359],{"class":264,"line":342},5,[262,344,275],{"class":268},[262,346,347],{"class":278},"expires_at",[262,349,282],{"class":268},[262,351,285],{"class":268},[262,353,288],{"class":268},[262,355,356],{"class":291},"2026-09-10T14:30:00Z",[262,358,282],{"class":268},[262,360,297],{"class":268},[262,362,364,366,369,371,373,375,378],{"class":264,"line":363},6,[262,365,275],{"class":268},[262,367,368],{"class":278},"created_at",[262,370,282],{"class":268},[262,372,285],{"class":268},[262,374,288],{"class":268},[262,376,377],{"class":291},"2026-09-03T14:30:00Z",[262,379,380],{"class":268},"\"\n",[262,382,384],{"class":264,"line":383},7,[262,385,386],{"class":268},"}\n",[245,388,390],{"id":389},"standard-error-envelope","Standard Error Envelope",[228,392,393],{},"When an operation fails, the API responds with a structured error payload:",[253,395,397],{"className":255,"code":396,"language":257,"meta":258,"style":258},"{\n  \"error\": \"The destination URL cannot point to internal or private IP subnets.\"\n}\n",[232,398,399,403,421],{"__ignoreMap":258},[262,400,401],{"class":264,"line":265},[262,402,269],{"class":268},[262,404,405,407,410,412,414,416,419],{"class":264,"line":272},[262,406,275],{"class":268},[262,408,409],{"class":278},"error",[262,411,282],{"class":268},[262,413,285],{"class":268},[262,415,288],{"class":268},[262,417,418],{"class":291},"The destination URL cannot point to internal or private IP subnets.",[262,420,380],{"class":268},[262,422,423],{"class":264,"line":300},[262,424,386],{"class":268},[237,426],{},[240,428,430],{"id":429},"http-status-codes-reference","HTTP Status Codes Reference",[432,433,434,450],"table",{},[435,436,437],"thead",{},[438,439,440,444,447],"tr",{},[441,442,443],"th",{},"Code",[441,445,446],{},"Name",[441,448,449],{},"Usage in GO Shortener",[451,452,453,467,480,493,506,523,536,549,562,575],"tbody",{},[438,454,455,461,464],{},[456,457,458],"td",{},[232,459,460],{},"200",[456,462,463],{},"OK",[456,465,466],{},"Successful fetch, update, or action resolution",[438,468,469,474,477],{},[456,470,471],{},[232,472,473],{},"201",[456,475,476],{},"Created",[456,478,479],{},"Successful short link creation or account registration",[438,481,482,487,490],{},[456,483,484],{},[232,485,486],{},"302",[456,488,489],{},"Found",[456,491,492],{},"Active link redirection to target destination URL",[438,494,495,500,503],{},[456,496,497],{},[232,498,499],{},"400",[456,501,502],{},"Bad Request",[456,504,505],{},"Malformed JSON, failed URL validation, or SSRF policy violation",[438,507,508,513,516],{},[456,509,510],{},[232,511,512],{},"401",[456,514,515],{},"Unauthorized",[456,517,518,519,522],{},"Missing, invalid, or expired ",[232,520,521],{},"go_session"," cookie",[438,524,525,530,533],{},[456,526,527],{},[232,528,529],{},"403",[456,531,532],{},"Forbidden",[456,534,535],{},"Insufficient RBAC permissions, banned user, or disabled link",[438,537,538,543,546],{},[456,539,540],{},[232,541,542],{},"404",[456,544,545],{},"Not Found",[456,547,548],{},"Target short code or user does not exist",[438,550,551,556,559],{},[456,552,553],{},[232,554,555],{},"410",[456,557,558],{},"Gone",[456,560,561],{},"Target short link has expired",[438,563,564,569,572],{},[456,565,566],{},[232,567,568],{},"429",[456,570,571],{},"Too Many Requests",[456,573,574],{},"Anonymous 24-hour quota or monthly registered quota exceeded",[438,576,577,582,585],{},[456,578,579],{},[232,580,581],{},"500",[456,583,584],{},"Internal Error",[456,586,587],{},"Unhandled server panic or SQLite transaction error",[237,589],{},[240,591,593],{"id":592},"authentication-mechanism","Authentication Mechanism",[228,595,596,597,599],{},"API calls to protected endpoints authenticate using the HTTP-only ",[232,598,521],{}," cookie:",[601,602,603,615],"ul",{},[604,605,606,607,610,611,614],"li",{},"For web applications, standard ",[232,608,609],{},"fetch"," with ",[232,612,613],{},"credentials: \"include\""," automatically transmits the cookie.",[604,616,617,618,621,622],{},"For external API testing via ",[232,619,620],{},"curl",", supply the cookie header:\n",[253,623,628],{"className":624,"code":625,"filename":626,"language":627,"meta":258,"style":258},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -H \"Cookie: go_session=your_session_token\" https:\u002F\u002Fgo.arcn.online\u002Fapi\u002Fuser\u002Fdashboard\n","Terminal","bash",[232,629,630],{"__ignoreMap":258},[262,631,632,635,638,640,643,645],{"class":264,"line":265},[262,633,620],{"class":634},"sBMFI",[262,636,637],{"class":291}," -H",[262,639,288],{"class":268},[262,641,642],{"class":291},"Cookie: go_session=your_session_token",[262,644,282],{"class":268},[262,646,647],{"class":291}," https:\u002F\u002Fgo.arcn.online\u002Fapi\u002Fuser\u002Fdashboard\n",[649,650,651],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":258,"searchDepth":272,"depth":272,"links":653},[654,658,659],{"id":242,"depth":272,"text":243,"children":655},[656,657],{"id":247,"depth":300,"text":248},{"id":389,"depth":300,"text":390},{"id":429,"depth":272,"text":430},{"id":592,"depth":272,"text":593},"REST conventions, standard response formats, and error handling policies.","md",null,{},{"icon":182},{"title":666,"description":667},"Developer API Architecture - GO Shortener","Overview of GO Shortener's internal REST API standards, serialization formats, and error handling.","QchnUszXqJrP7gnfItgu02gEr0llDdzSTubRrX-1kH4",[670,672],{"title":174,"path":175,"stem":176,"description":671,"icon":177,"children":-1},"Internal engineering, directory organization, and high-performance design patterns.",{"title":184,"path":185,"stem":186,"description":673,"icon":187,"children":-1},"SQLite engine configuration, WAL mode, schema design, and table definitions.",1788462428632]