index.html 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549
  1. <!doctype html>
  2. <html lang="en" class="no-js">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  6. <meta name="generator" content="Hugo 0.91.2" />
  7. <meta name="robots" content="index, follow">
  8. <link rel="shortcut icon" href="/edgevpn/favicons/favicon.ico" >
  9. <link rel="apple-touch-icon" href="/edgevpn/favicons/apple-touch-icon-180x180.png" sizes="180x180">
  10. <link rel="icon" type="image/png" href="/edgevpn/favicons/favicon-16x16.png" sizes="16x16">
  11. <link rel="icon" type="image/png" href="/edgevpn/favicons/favicon-32x32.png" sizes="32x32">
  12. <link rel="icon" type="image/png" href="/edgevpn/favicons/android-36x36.png" sizes="36x36">
  13. <link rel="icon" type="image/png" href="/edgevpn/favicons/android-48x48.png" sizes="48x48">
  14. <link rel="icon" type="image/png" href="/edgevpn/favicons/android-72x72.png" sizes="72x72">
  15. <link rel="icon" type="image/png" href="/edgevpn/favicons/android-96x96.png" sizes="96x96">
  16. <link rel="icon" type="image/png" href="/edgevpn/favicons/android-144x144.png" sizes="144x144">
  17. <link rel="icon" type="image/png" href="/edgevpn/favicons/android-192x192.png" sizes="192x192">
  18. <title>WebUI and API | EdgeVPN</title>
  19. <meta name="description" content="Query the network status and operate the ledger with the built-in API
  20. ">
  21. <meta property="og:title" content="WebUI and API" />
  22. <meta property="og:description" content="Query the network status and operate the ledger with the built-in API
  23. " />
  24. <meta property="og:type" content="article" />
  25. <meta property="og:url" content="https://mudler.github.io/edgevpn/docs/getting-started/api/" /><meta property="article:section" content="docs" />
  26. <meta property="article:modified_time" content="2024-05-15T15:19:50+02:00" /><meta property="og:site_name" content="EdgeVPN" />
  27. <meta itemprop="name" content="WebUI and API">
  28. <meta itemprop="description" content="Query the network status and operate the ledger with the built-in API
  29. ">
  30. <meta itemprop="dateModified" content="2024-05-15T15:19:50+02:00" />
  31. <meta itemprop="wordCount" content="328">
  32. <meta itemprop="keywords" content="" /><meta name="twitter:card" content="summary"/>
  33. <meta name="twitter:title" content="WebUI and API"/>
  34. <meta name="twitter:description" content="Query the network status and operate the ledger with the built-in API
  35. "/>
  36. <link rel="preload" href="/edgevpn/scss/main.min.08b7c43cd23e065bfc51bfe9ee553fe53c0a9b8ba4c69c637de2271094061dcb.css" as="style">
  37. <link href="/edgevpn/scss/main.min.08b7c43cd23e065bfc51bfe9ee553fe53c0a9b8ba4c69c637de2271094061dcb.css" rel="stylesheet" integrity="">
  38. <script
  39. src="https://code.jquery.com/jquery-3.6.0.min.js"
  40. integrity="sha384-vtXRMe3mGCbOeY7l30aIg8H9p3GdeSe4IFlP6G8JMa7o7lXvnz3GFKzPxzJdPfGK"
  41. crossorigin="anonymous"></script>
  42. <script
  43. src="https://unpkg.com/[email protected]/lunr.min.js"
  44. integrity="sha384-203J0SNzyqHby3iU6hzvzltrWi/M41wOP5Gu+BiJMz5nwKykbkUx8Kp7iti0Lpli"
  45. crossorigin="anonymous"></script>
  46. <script type="application/javascript">
  47. var doNotTrack = false;
  48. if (!doNotTrack) {
  49. window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
  50. ga('create', 'UA-00000000-0', 'auto');
  51. ga('send', 'pageview');
  52. }
  53. </script>
  54. <script async src='https://www.google-analytics.com/analytics.js'></script>
  55. </head>
  56. <body class="td-page">
  57. <header>
  58. <nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar">
  59. <a class="navbar-brand" href="/edgevpn/">
  60. <span class="navbar-logo"><svg id="svg2" width="42" height="42" viewBox="0 0 42 42" sodipodi:docname="logo.svg" inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><defs id="defs6"/><sodipodi:namedview id="namedview4" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" inkscape:pageshadow="2" inkscape:pageopacity="0" inkscape:pagecheckerboard="0" showgrid="false" inkscape:zoom="1.4199219" inkscape:cx="23.240715" inkscape:cy="199.65887" inkscape:window-width="1680" inkscape:window-height="991" inkscape:window-x="1920" inkscape:window-y="25" inkscape:window-maximized="1" inkscape:current-layer="g8"/><g inkscape:groupmode="layer" inkscape:label="Image" id="g8"><image width="37.374432" height="37.374432" preserveAspectRatio="none" xlink:href="data:image/png;base64,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 IBLPMsO0iTeIpzdtg/M+cZgVZZX4nHjMpAsSP3Jd8fiNc8FlgWeGzXRqnjhMLBbaWGljVjQ14ini qKrplC9kPFY5b3HWylXWvCd/YSinryxznWYECSxiCRJEKKiihDJsxGjVSbGQov24j3/I9UvkUshV AiPHAirQILt+8D/43a2Vn5zwkkJxoPPFcT5GgK5doFFznO9jx2mcAMFn4Epv+St1YOaT9FpLix4B fdvAxXVLU/aAyx1g8MmQTdmVgjSFfB54P6NvygL9t0DPmtdbcx+nD0CaukreAAeHwGiBstd93t3d 3tu/Z5r9/QBaDXKdod5vmwAADRppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBi ZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1s bnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxy ZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4 LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJo dHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9u cy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJo dHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93 d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlm Zi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4 bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6OWUyODRkYTEtMDVhZS00NGZhLTg5ODYt ZWJmODA1MWNiZTM4IgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjU1ZDdhNGNhLThlZDMt NGUwMi05YjVmLWNhYjk4OTE5NDI0MyIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAu ZGlkOjk2YTkwMjk2LTgzZTAtNGI5Zi1iZGIxLWJlODZkOGM3Mjg4OCIKICAgZGM6Rm9ybWF0PSJp bWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBH SU1QOlRpbWVTdGFtcD0iMTYzODU2NzI4NTU3MDk4OSIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjI4 IgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCI+ CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2 dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0 YW5jZUlEPSJ4bXAuaWlkOjMxZDU4YzU3LTI3ODMtNDBjYi04NzgzLWUzNTU0OWE5YzZjNCIKICAg ICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0Ondo ZW49IjIwMjEtMTItMDNUMjI6MzQ6NDUrMDE6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBN TTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hw YWNrZXQgZW5kPSJ3Ij8+yFTlLgAAAAZiS0dEAOAA+wD83A1epgAAAAlwSFlzAAAOxAAADsQBlSsO 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" id="image10" x="5.0075426" y="2.3861113"/></g></svg></span><span class="font-weight-bold">EdgeVPN</span>
  61. </a>
  62. <div class="td-navbar-nav-scroll ml-md-auto" id="main_navbar">
  63. <ul class="navbar-nav mt-2 mt-lg-0">
  64. <li class="nav-item mr-4 mb-2 mb-lg-0">
  65. <a class="nav-link active" href="/edgevpn/docs/" ><span class="active">Documentation</span></a>
  66. </li>
  67. <li class="nav-item mr-4 mb-2 mb-lg-0">
  68. <a class="nav-link" href="/edgevpn/community/" ><span>Community</span></a>
  69. </li>
  70. <li class="nav-item mr-4 mb-2 mb-lg-0">
  71. <a class="nav-link" href="https://github.com/mudler/edgevpn/contribute" target="_blank" ><i class='fab fa-github'></i><span>Contribution guidelines</span></a>
  72. </li>
  73. </ul>
  74. </div>
  75. <div class="navbar-nav d-none d-lg-block"><input
  76. type="search"
  77. class="form-control td-search-input"
  78. placeholder="&#xf002; Search this site…"
  79. aria-label="Search this site…"
  80. autocomplete="off"
  81. data-offline-search-index-json-src="/edgevpn/offline-search-index.74aff338a67633f73721538401193994.json"
  82. data-offline-search-base-href="/"
  83. data-offline-search-max-results="10"
  84. >
  85. </div>
  86. </nav>
  87. </header>
  88. <div class="container-fluid td-outer">
  89. <div class="td-main">
  90. <div class="row flex-xl-nowrap">
  91. <aside class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none">
  92. <div id="td-sidebar-menu" class="td-sidebar__inner">
  93. <form class="td-sidebar__search d-flex align-items-center">
  94. <input
  95. type="search"
  96. class="form-control td-search-input"
  97. placeholder="&#xf002; Search this site…"
  98. aria-label="Search this site…"
  99. autocomplete="off"
  100. data-offline-search-index-json-src="/edgevpn/offline-search-index.74aff338a67633f73721538401193994.json"
  101. data-offline-search-base-href="/"
  102. data-offline-search-max-results="10"
  103. >
  104. <button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type="button" data-toggle="collapse" data-target="#td-section-nav" aria-controls="td-docs-nav" aria-expanded="false" aria-label="Toggle section navigation">
  105. </button>
  106. </form>
  107. <nav class="collapse td-sidebar-nav" id="td-section-nav">
  108. <ul class="td-sidebar-nav__section pr-md-3 ul-0">
  109. <li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id="m-edgevpndocs-li">
  110. <a href="/edgevpn/docs/" class="align-left pl-0 td-sidebar-link td-sidebar-link__section tree-root" id="m-edgevpndocs"><span class="">Documentation</span></a>
  111. <ul class="ul-1">
  112. <li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id="m-edgevpndocsgetting-started-li">
  113. <a href="/edgevpn/docs/getting-started/" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id="m-edgevpndocsgetting-started"><span class="">Getting Started</span></a>
  114. <ul class="ul-2 foldable">
  115. <li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id="m-edgevpndocsgetting-startedcli-li">
  116. <a href="/edgevpn/docs/getting-started/cli/" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id="m-edgevpndocsgetting-startedcli"><span class="">CLI</span></a>
  117. </li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id="m-edgevpndocsgetting-startedgui-li">
  118. <a href="/edgevpn/docs/getting-started/gui/" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id="m-edgevpndocsgetting-startedgui"><span class="">GUI</span></a>
  119. </li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child active-path" id="m-edgevpndocsgetting-startedapi-li">
  120. <a href="/edgevpn/docs/getting-started/api/" class="align-left pl-0 active td-sidebar-link td-sidebar-link__page" id="m-edgevpndocsgetting-startedapi"><span class="td-sidebar-nav-active-item">WebUI and API</span></a>
  121. </li>
  122. </ul>
  123. </li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id="m-edgevpndocsconcepts-li">
  124. <a href="/edgevpn/docs/concepts/" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id="m-edgevpndocsconcepts"><span class="">Concepts</span></a>
  125. <ul class="ul-2 foldable">
  126. <li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id="m-edgevpndocsconceptsoverview-li">
  127. <a href="/edgevpn/docs/concepts/overview/" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id="m-edgevpndocsconceptsoverview"><span class="">Overview</span></a>
  128. <ul class="ul-3 foldable">
  129. <li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id="m-edgevpndocsconceptsoverviewservices-li">
  130. <a href="/edgevpn/docs/concepts/overview/services/" title="Tunnel connections" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id="m-edgevpndocsconceptsoverviewservices"><span class="">Tunnelling</span></a>
  131. </li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id="m-edgevpndocsconceptsoverviewdns-li">
  132. <a href="/edgevpn/docs/concepts/overview/dns/" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id="m-edgevpndocsconceptsoverviewdns"><span class="">DNS</span></a>
  133. </li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id="m-edgevpndocsconceptsoverviewfiles-li">
  134. <a href="/edgevpn/docs/concepts/overview/files/" title="Sending and receiving files" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id="m-edgevpndocsconceptsoverviewfiles"><span class="">File transfer</span></a>
  135. </li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id="m-edgevpndocsconceptsoverviewpeerguardian-li">
  136. <a href="/edgevpn/docs/concepts/overview/peerguardian/" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id="m-edgevpndocsconceptsoverviewpeerguardian"><span class="">Peerguardian</span></a>
  137. </li>
  138. </ul>
  139. </li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id="m-edgevpndocsconceptsarchitecture-li">
  140. <a href="/edgevpn/docs/concepts/architecture/" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id="m-edgevpndocsconceptsarchitecture"><span class="">Architecture</span></a>
  141. </li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id="m-edgevpndocsconceptstoken-li">
  142. <a href="/edgevpn/docs/concepts/token/" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id="m-edgevpndocsconceptstoken"><span class="">Token</span></a>
  143. </li>
  144. </ul>
  145. </li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id="m-edgevpndocscontribution-guidelines-li">
  146. <a href="/edgevpn/docs/contribution-guidelines/" title="Contributing" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id="m-edgevpndocscontribution-guidelines"><span class="">Contribution guidelines</span></a>
  147. </li>
  148. </ul>
  149. </li>
  150. </ul>
  151. </nav>
  152. </div>
  153. </aside>
  154. <aside class="d-none d-xl-block col-xl-2 td-sidebar-toc d-print-none">
  155. <div class="td-page-meta ml-2 pb-1 pt-2 mb-0">
  156. <a href="https://github.com/mudler/edgevpn/tree/master/docs/content/en/docs/Getting%20started/api.md" class="td-page-meta--view" target="_blank" rel="noopener"><i class="fa fa-file-alt fa-fw"></i> View page source</a>
  157. <a href="https://github.com/mudler/edgevpn/edit/master/docs/content/en/docs/Getting%20started/api.md" class="td-page-meta--edit" target="_blank" rel="noopener"><i class="fa fa-edit fa-fw"></i> Edit this page</a>
  158. <a href="https://github.com/mudler/edgevpn/new/master/docs/content/en/docs/Getting%20started/api.md?filename=change-me.md&amp;value=---%0Atitle%3A&#43;%22Long&#43;Page&#43;Title%22%0AlinkTitle%3A&#43;%22Short&#43;Nav&#43;Title%22%0Aweight%3A&#43;100%0Adescription%3A&#43;%3E-%0A&#43;&#43;&#43;&#43;&#43;Page&#43;description&#43;for&#43;heading&#43;and&#43;indexes.%0A---%0A%0A%23%23&#43;Heading%0A%0AEdit&#43;this&#43;template&#43;to&#43;create&#43;your&#43;new&#43;page.%0A%0A%2A&#43;Give&#43;it&#43;a&#43;good&#43;name%2C&#43;ending&#43;in&#43;%60.md%60&#43;-&#43;e.g.&#43;%60getting-started.md%60%0A%2A&#43;Edit&#43;the&#43;%22front&#43;matter%22&#43;section&#43;at&#43;the&#43;top&#43;of&#43;the&#43;page&#43;%28weight&#43;controls&#43;how&#43;its&#43;ordered&#43;amongst&#43;other&#43;pages&#43;in&#43;the&#43;same&#43;directory%3B&#43;lowest&#43;number&#43;first%29.%0A%2A&#43;Add&#43;a&#43;good&#43;commit&#43;message&#43;at&#43;the&#43;bottom&#43;of&#43;the&#43;page&#43;%28%3C80&#43;characters%3B&#43;use&#43;the&#43;extended&#43;description&#43;field&#43;for&#43;more&#43;detail%29.%0A%2A&#43;Create&#43;a&#43;new&#43;branch&#43;so&#43;you&#43;can&#43;preview&#43;your&#43;new&#43;file&#43;and&#43;request&#43;a&#43;review&#43;via&#43;Pull&#43;Request.%0A" class="td-page-meta--child" target="_blank" rel="noopener"><i class="fa fa-edit fa-fw"></i> Create child page</a>
  159. <a href="https://github.com/mudler/edgevpn/issues/new?title=WebUI%20and%20API" class="td-page-meta--issue" target="_blank" rel="noopener"><i class="fab fa-github fa-fw"></i> Create documentation issue</a>
  160. <a href="https://github.com/mudler/edgevpn/issues/new" class="td-page-meta--project-issue" target="_blank" rel="noopener"><i class="fas fa-tasks fa-fw"></i> Create project issue</a>
  161. </div>
  162. <div class="td-toc"><nav id="TableOfContents">
  163. <ul>
  164. <li><a href="#api-endpoints">API endpoints</a>
  165. <ul>
  166. <li><a href="#get">GET</a></li>
  167. <li><a href="#put">PUT</a></li>
  168. <li><a href="#post">POST</a></li>
  169. <li><a href="#delete">DELETE</a></li>
  170. </ul>
  171. </li>
  172. <li><a href="#binding-to-a-socket">Binding to a socket</a></li>
  173. </ul>
  174. </nav></div>
  175. </aside>
  176. <main class="col-12 col-md-9 col-xl-8 pl-md-5" role="main">
  177. <div class="td-content">
  178. <h1>WebUI and API</h1>
  179. <div class="lead">Query the network status and operate the ledger with the built-in API</div>
  180. <header class="article-meta">
  181. </header>
  182. <p>The API has a simple webUI embedded to display network informations.</p>
  183. <p>To access the web interface, run in the console:</p>
  184. <div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">$ edgevpn api
  185. </code></pre></div><p>with either a <code>EDGEVPNCONFIG</code> or <code>EDGEVPNTOKEN</code>.</p>
  186. <table>
  187. <thead>
  188. <tr>
  189. <th style="text-align:center">Dashboard (Dark mode)</th>
  190. <th style="text-align:center">Dashboard (Light mode)</th>
  191. </tr>
  192. </thead>
  193. <tbody>
  194. <tr>
  195. <td style="text-align:center"><img src="https://user-images.githubusercontent.com/2420543/163020448-8e9238c1-3b6d-435d-9b25-7729d8779ebd.png" alt="Screenshot 2021-10-31 at 00-12-16 EdgeVPN - Machines index"></td>
  196. <td style="text-align:center"><img src="https://user-images.githubusercontent.com/2420543/163020460-e18c07d7-8426-4992-aab3-0b2fd90279ae.png" alt="Screenshot 2021-10-31 at 23-03-26 EdgeVPN - Machines index"></td>
  197. </tr>
  198. </tbody>
  199. </table>
  200. <table>
  201. <thead>
  202. <tr>
  203. <th style="text-align:center">DNS</th>
  204. <th style="text-align:center">Machine index</th>
  205. </tr>
  206. </thead>
  207. <tbody>
  208. <tr>
  209. <td style="text-align:center"><img src="https://user-images.githubusercontent.com/2420543/163020465-3d481da4-4912-445e-afc0-2614966dcadf.png" alt="Screenshot 2021-10-31 at 23-03-44 EdgeVPN - Services index"></td>
  210. <td style="text-align:center"><img src="https://user-images.githubusercontent.com/2420543/163020462-7821a622-8c13-4971-8abe-9c5b6b491ae8.png" alt="Screenshot 2021-10-31 at 23-03-59 EdgeVPN - Files index"></td>
  211. </tr>
  212. </tbody>
  213. </table>
  214. <table>
  215. <thead>
  216. <tr>
  217. <th style="text-align:center">Services</th>
  218. <th style="text-align:center">Blockchain index</th>
  219. </tr>
  220. </thead>
  221. <tbody>
  222. <tr>
  223. <td style="text-align:center"><img src="https://user-images.githubusercontent.com/2420543/163021285-3c5a980d-2562-4c10-b266-7e99f19d8a87.png" alt="Screenshot 2021-10-31 at 23-04-12 EdgeVPN - Users connected"></td>
  224. <td style="text-align:center"><img src="https://user-images.githubusercontent.com/2420543/163020457-77ef6e50-40a6-4e3b-83c4-a81db729bd7d.png" alt="Screenshot 2021-10-31 at 23-04-20 EdgeVPN - Blockchain index"></td>
  225. </tr>
  226. </tbody>
  227. </table>
  228. <p>In API mode, EdgeVPN will connect to the network without routing any packet, and without setting up a VPN interface.</p>
  229. <p>By default edgevpn will listen on the <code>8080</code> port. See <code>edgevpn api --help</code> for the available options</p>
  230. <p>API can also be started together with the vpn with <code>--api</code>.</p>
  231. <h2 id="api-endpoints">API endpoints</h2>
  232. <h3 id="get">GET</h3>
  233. <h4 id="apiusers"><code>/api/users</code></h4>
  234. <p>Returns the users connected to services in the blockchain</p>
  235. <h4 id="apiservices"><code>/api/services</code></h4>
  236. <p>Returns the services running in the blockchain</p>
  237. <h4 id="apidns"><code>/api/dns</code></h4>
  238. <p>Returns the domains registered in the blockchain</p>
  239. <h4 id="apimachines"><code>/api/machines</code></h4>
  240. <p>Returns the machines connected to the VPN</p>
  241. <h4 id="apiblockchain"><code>/api/blockchain</code></h4>
  242. <p>Returns the latest available blockchain</p>
  243. <h4 id="apiledger"><code>/api/ledger</code></h4>
  244. <p>Returns the current data in the ledger</p>
  245. <h4 id="apiledgerbucket"><code>/api/ledger/:bucket</code></h4>
  246. <p>Returns the current data in the ledger inside the <code>:bucket</code></p>
  247. <h4 id="apiledgerbucketkey"><code>/api/ledger/:bucket/:key</code></h4>
  248. <p>Returns the current data in the ledger inside the <code>:bucket</code> at given <code>:key</code></p>
  249. <h4 id="apipeergate"><code>/api/peergate</code></h4>
  250. <p>Returns peergater status</p>
  251. <h3 id="put">PUT</h3>
  252. <h4 id="apiledgerbucketkeyvalue"><code>/api/ledger/:bucket/:key/:value</code></h4>
  253. <p>Puts <code>:value</code> in the ledger inside the <code>:bucket</code> at given <code>:key</code></p>
  254. <h4 id="apipeergatestate"><code>/api/peergate/:state</code></h4>
  255. <p>Enables/disables peergating:</p>
  256. <div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#8f5902;font-style:italic"># enable</span>
  257. $ curl -X PUT <span style="color:#4e9a06">&#39;http://localhost:8080/api/peergate/enable&#39;</span>
  258. <span style="color:#8f5902;font-style:italic"># disable</span>
  259. $ curl -X PUT <span style="color:#4e9a06">&#39;http://localhost:8080/api/peergate/disable&#39;</span>
  260. </code></pre></div><h3 id="post">POST</h3>
  261. <h4 id="apidns-1"><code>/api/dns</code></h4>
  262. <p>The endpoint accept a JSON payload of the following form:</p>
  263. <div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-json" data-lang="json"><span style="color:#000;font-weight:bold">{</span> <span style="color:#204a87;font-weight:bold">&#34;Regex&#34;</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#4e9a06">&#34;&lt;regex&gt;&#34;</span><span style="color:#000;font-weight:bold">,</span>
  264. <span style="color:#204a87;font-weight:bold">&#34;Records&#34;</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#000;font-weight:bold">{</span>
  265. <span style="color:#204a87;font-weight:bold">&#34;A&#34;</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#4e9a06">&#34;2.2.2.2&#34;</span><span style="color:#000;font-weight:bold">,</span>
  266. <span style="color:#204a87;font-weight:bold">&#34;AAAA&#34;</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#4e9a06">&#34;...&#34;</span><span style="color:#000;font-weight:bold">,</span>
  267. <span style="color:#000;font-weight:bold">},</span>
  268. <span style="color:#000;font-weight:bold">}</span>
  269. </code></pre></div><p>Takes a regex and a set of records and registers them to the blockchain.</p>
  270. <p>The DNS table in the ledger will be used by the embedded DNS server to handle requests locally.</p>
  271. <p>To create a new entry, for example:</p>
  272. <div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">$ curl -X POST http://localhost:8080/api/dns --header <span style="color:#4e9a06">&#34;Content-Type: application/json&#34;</span> -d <span style="color:#4e9a06">&#39;{ &#34;Regex&#34;: &#34;foo.bar&#34;, &#34;Records&#34;: { &#34;A&#34;: &#34;2.2.2.2&#34; } }&#39;</span>
  273. </code></pre></div><h3 id="delete">DELETE</h3>
  274. <h4 id="apiledgerbucketkey-1"><code>/api/ledger/:bucket/:key</code></h4>
  275. <p>Deletes the <code>:key</code> into <code>:bucket</code> inside the ledger</p>
  276. <h4 id="apiledgerbucket-1"><code>/api/ledger/:bucket</code></h4>
  277. <p>Deletes the <code>:bucket</code> from the ledger</p>
  278. <h2 id="binding-to-a-socket">Binding to a socket</h2>
  279. <p>The API can also be bound to a socket, for instance:</p>
  280. <div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">$ edgevpn api --listen <span style="color:#4e9a06">&#34;unix://&lt;path/to/socket&gt;&#34;</span>
  281. </code></pre></div><p>or as well while running the vpn:</p>
  282. <div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">$ edgevpn api --api-listen <span style="color:#4e9a06">&#34;unix://&lt;path/to/socket&gt;&#34;</span>
  283. </code></pre></div>
  284. <style>
  285. .feedback--answer {
  286. display: inline-block;
  287. }
  288. .feedback--answer-no {
  289. margin-left: 1em;
  290. }
  291. .feedback--response {
  292. display: none;
  293. margin-top: 1em;
  294. }
  295. .feedback--response__visible {
  296. display: block;
  297. }
  298. </style>
  299. <div class="d-print-none">
  300. <h2 class="feedback--title">Feedback</h2>
  301. <p class="feedback--question">Was this page helpful?</p>
  302. <button class="btn btn-primary mb-4 feedback--answer feedback--answer-yes">Yes</button>
  303. <button class="btn btn-primary mb-4 feedback--answer feedback--answer-no">No</button>
  304. <p class="feedback--response feedback--response-yes">
  305. Glad to hear it! Please <a href="https://github.com/EdgeVPN-lab/docs/issues/new">tell us how we can improve</a>.
  306. </p>
  307. <p class="feedback--response feedback--response-no">
  308. Sorry to hear that. Please <a href="https://github.com/EdgeVPN-lab/docs/issues/new">tell us how we can improve</a>.
  309. </p>
  310. </div>
  311. <script>
  312. const yesButton = document.querySelector('.feedback--answer-yes');
  313. const noButton = document.querySelector('.feedback--answer-no');
  314. const yesResponse = document.querySelector('.feedback--response-yes');
  315. const noResponse = document.querySelector('.feedback--response-no');
  316. const disableButtons = () => {
  317. yesButton.disabled = true;
  318. noButton.disabled = true;
  319. };
  320. const sendFeedback = (value) => {
  321. if (typeof ga !== 'function') return;
  322. const args = {
  323. command: 'send',
  324. hitType: 'event',
  325. category: 'Helpful',
  326. action: 'click',
  327. label: window.location.pathname,
  328. value: value
  329. };
  330. ga(args.command, args.hitType, args.category, args.action, args.label, args.value);
  331. };
  332. yesButton.addEventListener('click', () => {
  333. yesResponse.classList.add('feedback--response__visible');
  334. disableButtons();
  335. sendFeedback(1);
  336. });
  337. noButton.addEventListener('click', () => {
  338. noResponse.classList.add('feedback--response__visible');
  339. disableButtons();
  340. sendFeedback(0);
  341. });
  342. </script>
  343. <br />
  344. <div class="text-muted mt-5 pt-3 border-top">
  345. Last modified May 15, 2024: <a href="https://github.com/mudler/edgevpn/commit/6e74074242ecf2a655a07e1190c079bc081492c3">Merge pull request #367 from mauromorales/patch-3 (6e74074)</a>
  346. </div>
  347. </div>
  348. </main>
  349. </div>
  350. </div>
  351. <footer class="bg-dark py-5 row d-print-none">
  352. <div class="container-fluid mx-sm-5">
  353. <div class="row">
  354. <div class="col-6 col-sm-4 text-xs-center order-sm-2">
  355. <ul class="list-inline mb-0">
  356. <li class="list-inline-item mx-2 h3" data-toggle="tooltip" data-placement="top" title="GitHub Discussions" aria-label="GitHub Discussions">
  357. <a class="text-white" target="_blank" rel="noopener" href="https://github.com/mudler/edgevpn/discussions" aria-label="GitHub Discussions">
  358. <i class="fab fa-github"></i>
  359. </a>
  360. </li>
  361. <li class="list-inline-item mx-2 h3" data-toggle="tooltip" data-placement="top" title="Matrix chat" aria-label="Matrix chat">
  362. <a class="text-white" target="_blank" rel="noopener" href="https://matrix.to/#/#edgevpn:matrix.org" aria-label="Matrix chat">
  363. <i class="fas fa-comments"></i>
  364. </a>
  365. </li>
  366. </ul>
  367. </div>
  368. <div class="col-6 col-sm-4 text-right text-xs-center order-sm-3">
  369. <ul class="list-inline mb-0">
  370. <li class="list-inline-item mx-2 h3" data-toggle="tooltip" data-placement="top" title="GitHub" aria-label="GitHub">
  371. <a class="text-white" target="_blank" rel="noopener" href="https://github.com/mudler/edgevpn" aria-label="GitHub">
  372. <i class="fab fa-github"></i>
  373. </a>
  374. </li>
  375. </ul>
  376. </div>
  377. <div class="col-12 col-sm-4 text-center py-2 order-sm-2">
  378. <small class="text-white">&copy; 2024 Ettore Di Giacinto All Rights Reserved</small>
  379. <small class="ml-1"><a href="https://policies.google.com/privacy" target="_blank" rel="noopener">Privacy Policy</a></small>
  380. </div>
  381. </div>
  382. </div>
  383. </footer>
  384. </div>
  385. <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js"
  386. integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN"
  387. crossorigin="anonymous"></script>
  388. <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js"
  389. integrity="sha512-UR25UO94eTnCVwjbXozyeVd6ZqpaAE9naiEUBK/A+QDbfSTQFhPGj5lOR6d8tsgbBk84Ggb5A3EkjsOgPRPcKA=="
  390. crossorigin="anonymous"></script>
  391. <script src='/edgevpn/js/tabpane-persist.js'></script>
  392. <script src="/edgevpn/js/main.min.8ab8f81ff7e1454d30024cd6f956d4d341c3a97e2a673f988065f2ee4e147922.js" integrity="sha256-irj4H/fhRU0wAkzW&#43;VbU00HDqX4qZz&#43;YgGXy7k4UeSI=" crossorigin="anonymous"></script>
  393. </body>
  394. </html>