2025-01-18 12:13:09 +01:00
basePath : /api/v1
definitions :
2025-03-29 16:42:31 +01:00
models.ConfigOption-array_string :
properties :
Overridable :
type : boolean
Value :
items :
type : string
type : array
type : object
models.ConfigOption-int :
properties :
Overridable :
type : boolean
Value :
type : integer
type : object
models.ConfigOption-string :
properties :
Overridable :
type : boolean
Value :
type : string
type : object
models.ConfigOption-uint32 :
properties :
Overridable :
type : boolean
Value :
type : integer
type : object
models.Error :
properties :
Code :
description : HTTP status code.
type : integer
Details :
description : Additional error details.
type : string
Message :
description : Error message.
type : string
type : object
models.Interface :
properties :
Addresses :
description : Addresses is a list of IP addresses (in CIDR format) that are assigned to the interface.
example :
- 10.11 .12 .1 /24
items :
type : string
type : array
Disabled :
description : Disabled is a flag that specifies if the interface is enabled (up) or not (down). Disabled interfaces are not able to accept connections.
example : false
type : boolean
DisabledReason :
description : DisabledReason is the reason why the interface has been disabled.
example : This is a reason why the interface has been disabled.
type : string
DisplayName :
description : DisplayName is a nice display name / description for the interface.
example : My Interface
maxLength : 64
type : string
Dns :
description : Dns is a list of DNS servers that should be set if the interface is up.
example :
- 1.1 .1 .1
items :
type : string
type : array
DnsSearch :
description : DnsSearch is the dns search option string that should be set if the interface is up, will be appended to Dns servers.
example :
- wg.local
items :
type : string
type : array
EnabledPeers :
description : EnabledPeers is the number of enabled peers for this interface. Only enabled peers are able to connect.
readOnly : true
type : integer
2025-04-19 13:12:31 +02:00
Filename :
description : |-
Filename is the name of the config file for this interface.
This value is read only and is not settable by the user.
example : wg0.conf
maxLength : 21
readOnly : true
type : string
2025-03-29 16:42:31 +01:00
FirewallMark :
description : FirewallMark is an optional firewall mark which is used to handle interface traffic.
type : integer
Identifier :
description : Identifier is the unique identifier of the interface. It is always equal to the device name of the interface.
example : wg0
type : string
ListenPort :
description: 'ListenPort is the listening port, for example : 51820 . The listening port is only required for server interfaces.'
example : 51820
maximum : 65535
minimum : 1
type : integer
Mode :
description : Mode is the interface type, either 'server', 'client' or 'any'. The mode specifies how WireGuard Portal handles peers for this interface.
enum :
- server
- client
- any
example : server
type : string
Mtu :
description : Mtu is the device MTU of the interface.
example : 1420
maximum : 9000
minimum : 1
type : integer
PeerDefAllowedIPs :
description : PeerDefAllowedIPs specifies the default allowed IP addresses for a new peer.
example :
- 10.11 .12 .0 /24
items :
type : string
type : array
PeerDefDns :
description : PeerDefDns specifies the default dns servers for a new peer.
example :
- 8.8 .8 .8
items :
type : string
type : array
PeerDefDnsSearch :
description : PeerDefDnsSearch specifies the default dns search options for a new peer.
example :
- wg.local
items :
type : string
type : array
PeerDefEndpoint :
description : PeerDefEndpoint specifies the default endpoint for a new peer.
example : wg.example.com:51820
type : string
PeerDefFirewallMark :
description : PeerDefFirewallMark specifies the default firewall mark for a new peer.
type : integer
PeerDefMtu :
description : PeerDefMtu specifies the default device MTU for a new peer.
example : 1420
type : integer
PeerDefNetwork :
description : PeerDefNetwork specifies the default subnets from which new peers will get their IP addresses. The subnet is specified in CIDR format.
example :
- 10.11 .12 .0 /24
items :
type : string
type : array
PeerDefPersistentKeepalive :
description : PeerDefPersistentKeepalive specifies the default persistent keep-alive value in seconds for a new peer.
example : 25
type : integer
PeerDefPostDown :
description : PeerDefPostDown specifies the default action that is executed after the device is down for a new peer.
type : string
PeerDefPostUp :
description : PeerDefPostUp specifies the default action that is executed after the device is up for a new peer.
type : string
PeerDefPreDown :
description : PeerDefPreDown specifies the default action that is executed before the device is down for a new peer.
type : string
PeerDefPreUp :
description : PeerDefPreUp specifies the default action that is executed before the device is up for a new peer.
type : string
PeerDefRoutingTable :
description : PeerDefRoutingTable specifies the default routing table for a new peer.
type : string
PostDown :
description : PostDown is an optional action that is executed after the device is down.
example : echo 'Interface is down'
type : string
PostUp :
description : PostUp is an optional action that is executed after the device is up.
example : iptables -A FORWARD -i %i -j ACCEPT
type : string
PreDown :
description : PreDown is an optional action that is executed before the device is down.
example : iptables -D FORWARD -i %i -j ACCEPT
type : string
PreUp :
description : PreUp is an optional action that is executed before the device is up.
example : echo 'Interface is up'
type : string
PrivateKey :
description : PrivateKey is the private key of the interface.
example : gI6EdUSYvn8ugXOt8QQD6Yc+JyiZxIhp3GInSWRfWGE=
type : string
PublicKey :
description : PublicKey is the public key of the server interface. The public key is used by peers to connect to the server.
example : HIgo9xNzJMWLKASShiTqIybxZ0U3wGLiUeJ1PKf8ykw=
type : string
RoutingTable :
description : RoutingTable is an optional routing table which is used to route interface traffic.
type : string
SaveConfig :
description : SaveConfig is a flag that specifies if the configuration should be saved to the configuration file (wgX.conf in wg-quick format).
example : false
type : boolean
TotalPeers :
description : TotalPeers is the total number of peers for this interface.
readOnly : true
type : integer
required :
- Identifier
- Mode
- PrivateKey
- PublicKey
type : object
models.InterfaceMetrics :
properties :
BytesReceived :
description : The number of bytes received by the interface.
example : 123456789
type : integer
BytesTransmitted :
description : The number of bytes transmitted by the interface.
example : 123456789
type : integer
InterfaceIdentifier :
description : The unique identifier of the interface.
example : wg0
type : string
type : object
models.Peer :
properties :
Addresses :
description : Addresses is a list of IP addresses in CIDR format (both IPv4 and IPv6) for the peer.
example :
- 10.11 .12 .2 /24
items :
type : string
type : array
AllowedIPs :
allOf :
- $ref : '#/definitions/models.ConfigOption-array_string'
description : AllowedIPs is a list of allowed IP subnets for the peer.
CheckAliveAddress :
description : CheckAliveAddress is an optional ip address or DNS name that is used for ping checks.
example : 1.1 .1 .1
type : string
Disabled :
description : Disabled is a flag that specifies if the peer is enabled or not. Disabled peers are not able to connect.
example : false
type : boolean
DisabledReason :
description : DisabledReason is the reason why the peer has been disabled.
example : This is a reason why the peer has been disabled.
type : string
DisplayName :
description : DisplayName is a nice display name / description for the peer.
example : My Peer
maxLength : 64
type : string
Dns :
allOf :
- $ref : '#/definitions/models.ConfigOption-array_string'
description : Dns is a list of DNS servers that should be set if the peer interface is up.
DnsSearch :
allOf :
- $ref : '#/definitions/models.ConfigOption-array_string'
description : DnsSearch is the dns search option string that should be set if the peer interface is up, will be appended to Dns servers.
Endpoint :
allOf :
- $ref : '#/definitions/models.ConfigOption-string'
description : Endpoint is the endpoint address of the peer.
EndpointPublicKey :
allOf :
- $ref : '#/definitions/models.ConfigOption-string'
description : EndpointPublicKey is the endpoint public key.
ExpiresAt :
description : ExpiresAt is the expiry date of the peer in YYYY-MM-DD format. An expired peer is not able to connect.
type : string
ExtraAllowedIPs :
description : ExtraAllowedIPs is a list of additional allowed IP subnets for the peer. These allowed IP subnets are added on the server side.
items :
type : string
type : array
2025-04-19 13:12:31 +02:00
Filename :
description : |-
Filename is the name of the config file for this peer.
This value is read only and is not settable by the user.
example : wg_peer_x.conf
maxLength : 21
readOnly : true
type : string
2025-03-29 16:42:31 +01:00
FirewallMark :
allOf :
- $ref : '#/definitions/models.ConfigOption-uint32'
description : FirewallMark is an optional firewall mark which is used to handle peer traffic.
Identifier :
description : Identifier is the unique identifier of the peer. It is always equal to the public key of the peer.
example : xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
type : string
InterfaceIdentifier :
description : InterfaceIdentifier is the identifier of the interface the peer is linked to.
example : wg0
type : string
Mode :
description : Mode is the peer interface type (server, client, any).
enum :
- server
- client
- any
example : client
type : string
Mtu :
allOf :
- $ref : '#/definitions/models.ConfigOption-int'
description : Mtu is the device MTU of the peer.
Notes :
description : Notes is a note field for peers.
example : This is a note for the peer.
type : string
PersistentKeepalive :
allOf :
- $ref : '#/definitions/models.ConfigOption-int'
description : PersistentKeepalive is the optional persistent keep-alive interval in seconds.
PostDown :
allOf :
- $ref : '#/definitions/models.ConfigOption-string'
description : PostDown is an optional action that is executed after the device is down.
PostUp :
allOf :
- $ref : '#/definitions/models.ConfigOption-string'
description : PostUp is an optional action that is executed after the device is up.
PreDown :
allOf :
- $ref : '#/definitions/models.ConfigOption-string'
description : PreDown is an optional action that is executed before the device is down.
PreUp :
allOf :
- $ref : '#/definitions/models.ConfigOption-string'
description : PreUp is an optional action that is executed before the device is up.
PresharedKey :
description : PresharedKey is the optional pre-shared Key of the peer.
example : yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
type : string
PrivateKey :
description : PrivateKey is the private Key of the peer.
example : yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
type : string
PublicKey :
description : PublicKey is the public Key of the server peer.
example : TrMvSoP4jYQlY6RIzBgbssQqY3vxI2Pi+y71lOWWXX0=
type : string
RoutingTable :
allOf :
- $ref : '#/definitions/models.ConfigOption-string'
description : RoutingTable is an optional routing table which is used to route peer traffic.
UserIdentifier :
description : UserIdentifier is the identifier of the user that owns the peer.
example : uid-1234567
type : string
required :
- Identifier
- InterfaceIdentifier
- PrivateKey
type : object
models.PeerMetrics :
properties :
BytesReceived :
description : The number of bytes received by the peer.
example : 123456789
type : integer
BytesTransmitted :
description : The number of bytes transmitted by the peer.
example : 123456789
type : integer
Endpoint :
description : The current endpoint address of the peer.
example : 12.34 .56 .78
type : string
IsPingable :
description : If this field is set, the peer is pingable.
example : true
type : boolean
LastHandshake :
description : The last time the peer initiated a handshake.
example : "2021-01-01T12:00:00Z"
type : string
LastPing :
description : The last time the peer responded to a ICMP ping request.
example : "2021-01-01T12:00:00Z"
type : string
LastSessionStart :
description : The last time the peer initiated a session.
example : "2021-01-01T12:00:00Z"
type : string
PeerIdentifier :
description : The unique identifier of the peer.
example : xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
type : string
type : object
models.ProvisioningRequest :
properties :
InterfaceIdentifier :
description : InterfaceIdentifier is the identifier of the WireGuard interface the peer should be linked to.
example : wg0
type : string
PresharedKey :
description : PresharedKey is the optional pre-shared key of the peer. If no pre-shared key is set, a new key is generated.
example : yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
type : string
PublicKey :
description : PublicKey is the optional public key of the peer. If no public key is set, a new key pair is generated.
example : xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
type : string
UserIdentifier :
description : |-
UserIdentifier is the identifier of the user the peer should be linked to.
If no user identifier is set, the authenticated user is used.
example : uid-1234567
type : string
required :
- InterfaceIdentifier
type : object
models.User :
properties :
ApiEnabled :
description : If this field is set, the user is allowed to use the RESTful API. This field is read-only.
example : false
readOnly : true
type : boolean
ApiToken :
description : The API token of the user. This field is never populated on bulk read operations.
example : ""
maxLength : 64
minLength : 32
type : string
Department :
description : The department of the user. This field is optional.
example : Software Development
type : string
Disabled :
description : If this field is set, the user is disabled.
example : false
type : boolean
DisabledReason :
description : The reason why the user has been disabled.
example : ""
type : string
Email :
description : The email address of the user. This field is optional.
example : test@test.com
type : string
Firstname :
description : The first name of the user. This field is optional.
example : Max
type : string
Identifier :
description : The unique identifier of the user.
example : uid-1234567
maxLength : 64
type : string
IsAdmin :
description : If this field is set, the user is an admin.
example : false
type : boolean
Lastname :
description : The last name of the user. This field is optional.
example : Muster
type : string
Locked :
description : If this field is set, the user is locked and thus unable to log in to WireGuard Portal.
example : false
type : boolean
LockedReason :
description : The reason why the user has been locked.
example : ""
type : string
Notes :
description : Additional notes about the user. This field is optional.
example : some sample notes
type : string
Password :
description : The password of the user. This field is never populated on read operations.
example : ""
maxLength : 64
minLength : 16
type : string
PeerCount :
description : The number of peers linked to the user. This field is read-only.
example : 2
readOnly : true
type : integer
Phone :
description : The phone number of the user. This field is optional.
example : "+1234546789"
type : string
ProviderName :
description : The name of the authentication provider. This field is read-only.
example : ""
readOnly : true
type : string
Source :
description : The source of the user. This field is optional.
enum :
- db
example : db
type : string
required :
- Identifier
type : object
models.UserInformation :
properties :
PeerCount :
description : PeerCount is the number of peers linked to the user.
example : 2
type : integer
Peers :
description : Peers is a list of peers linked to the user.
items :
$ref : '#/definitions/models.UserInformationPeer'
type : array
UserIdentifier :
description : UserIdentifier is the unique identifier of the user.
example : uid-1234567
type : string
type : object
models.UserInformationPeer :
properties :
DisplayName :
description : DisplayName is a user-defined description of the peer.
example : My iPhone
type : string
Identifier :
description : Identifier is the unique identifier of the peer. It equals the public key of the peer.
example : peer-1234567
type : string
InterfaceIdentifier :
description : InterfaceIdentifier is the unique identifier of the WireGuard Portal device the peer is connected to.
example : wg0
type : string
IpAddresses :
description : IPAddresses is a list of IP addresses in CIDR format assigned to the peer.
example :
- 10.11 .12 .2 /24
items :
type : string
type : array
IsDisabled :
description : IsDisabled is a flag that specifies if the peer is enabled or not. Disabled peers are not able to connect.
example : true
type : boolean
type : object
models.UserMetrics :
properties :
BytesReceived :
description : The total number of bytes received by the user. This is the sum of all bytes received by the peers linked to the user.
example : 123456789
type : integer
BytesTransmitted :
description : The total number of bytes transmitted by the user. This is the sum of all bytes transmitted by the peers linked to the user.
example : 123456789
type : integer
PeerCount :
description : PeerCount represents the number of peers linked to the user.
example : 2
type : integer
PeerMetrics :
description : PeerMetrics represents the metrics of the peers linked to the user.
items :
$ref : '#/definitions/models.PeerMetrics'
type : array
UserIdentifier :
description : The unique identifier of the user.
example : uid-1234567
type : string
type : object
2025-01-18 12:13:09 +01:00
info :
2025-03-29 16:42:31 +01:00
contact :
name : WireGuard Portal Project
url : https://github.com/h44z/wg-portal
description : |-
The WireGuard Portal REST API enables efficient management of WireGuard VPN configurations through a set of JSON-based endpoints.
It supports creating and editing peers, interfaces, and user profiles, while also providing role-based access control and auditing.
This API allows seamless integration with external tools or scripts for automated network configuration and administration.
license :
name : MIT
url : https://github.com/h44z/wg-portal/blob/master/LICENSE.txt
title : WireGuard Portal Public API
version : "1.0"
2025-01-18 12:13:09 +01:00
paths :
2025-03-29 16:42:31 +01:00
/interface/all :
get :
operationId : interface_handleAllGet
produces :
- application/json
responses :
"200" :
description : OK
schema :
items :
$ref : '#/definitions/models.Interface'
type : array
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Get all interface records.
tags :
- Interfaces
/interface/by-id/{id}:
delete :
operationId : interfaces_handleDelete
parameters :
- description : The interface identifier.
in : path
name : id
required : true
type : string
produces :
- application/json
responses :
"204" :
description : No content if deletion was successful.
"400" :
description : Bad Request
schema :
$ref : '#/definitions/models.Error'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"403" :
description : Forbidden
schema :
$ref : '#/definitions/models.Error'
"404" :
description : Not Found
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Delete the interface record.
tags :
- Interfaces
get :
operationId : interfaces_handleByIdGet
parameters :
- description : The interface identifier.
in : path
name : id
required : true
type : string
produces :
- application/json
responses :
"200" :
description : OK
schema :
$ref : '#/definitions/models.Interface'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"403" :
description : Forbidden
schema :
$ref : '#/definitions/models.Error'
"404" :
description : Not Found
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Get a specific interface record by its identifier.
tags :
- Interfaces
put :
2025-05-09 16:19:36 +02:00
description : This endpoint updates an existing interface with the provided data. All required fields must be filled (e.g. name, private key, public key, ...).
2025-03-29 16:42:31 +01:00
operationId : interfaces_handleUpdatePut
parameters :
- description : The interface identifier.
in : path
name : id
required : true
type : string
- description : The interface data.
in : body
name : request
required : true
schema :
$ref : '#/definitions/models.Interface'
produces :
- application/json
responses :
"200" :
description : OK
schema :
$ref : '#/definitions/models.Interface'
"400" :
description : Bad Request
schema :
$ref : '#/definitions/models.Error'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"403" :
description : Forbidden
schema :
$ref : '#/definitions/models.Error'
"404" :
description : Not Found
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Update an interface record.
tags :
- Interfaces
/interface/new :
post :
2025-05-09 16:19:36 +02:00
description : This endpoint creates a new interface with the provided data. All required fields must be filled (e.g. name, private key, public key, ...).
2025-03-29 16:42:31 +01:00
operationId : interfaces_handleCreatePost
parameters :
- description : The interface data.
in : body
name : request
required : true
schema :
$ref : '#/definitions/models.Interface'
produces :
- application/json
responses :
"200" :
description : OK
schema :
$ref : '#/definitions/models.Interface'
"400" :
description : Bad Request
schema :
$ref : '#/definitions/models.Error'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"403" :
description : Forbidden
schema :
$ref : '#/definitions/models.Error'
"409" :
description : Conflict
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Create a new interface record.
tags :
- Interfaces
2025-05-09 16:19:36 +02:00
/interface/prepare :
get :
description : This endpoint returns a new interface with default values (fresh key pair, valid name, new IP address pool, ...).
operationId : interfaces_handlePrepareGet
produces :
- application/json
responses :
"200" :
description : OK
schema :
$ref : '#/definitions/models.Interface'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"403" :
description : Forbidden
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Prepare a new interface record.
tags :
- Interfaces
2025-03-29 16:42:31 +01:00
/metrics/by-interface/{id}:
get :
operationId : metrics_handleMetricsForInterfaceGet
parameters :
- description : The WireGuard interface identifier.
in : path
name : id
required : true
type : string
produces :
- application/json
responses :
"200" :
description : OK
schema :
$ref : '#/definitions/models.InterfaceMetrics'
"400" :
description : Bad Request
schema :
$ref : '#/definitions/models.Error'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"404" :
description : Not Found
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Get all metrics for a WireGuard Portal interface.
tags :
- Metrics
/metrics/by-peer/{id}:
get :
operationId : metrics_handleMetricsForPeerGet
parameters :
- description : The peer identifier (public key).
in : path
name : id
required : true
type : string
produces :
- application/json
responses :
"200" :
description : OK
schema :
$ref : '#/definitions/models.PeerMetrics'
"400" :
description : Bad Request
schema :
$ref : '#/definitions/models.Error'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"404" :
description : Not Found
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Get all metrics for a WireGuard Portal peer.
tags :
- Metrics
/metrics/by-user/{id}:
get :
operationId : metrics_handleMetricsForUserGet
parameters :
- description : The user identifier.
in : path
name : id
required : true
type : string
produces :
- application/json
responses :
"200" :
description : OK
schema :
$ref : '#/definitions/models.UserMetrics'
"400" :
description : Bad Request
schema :
$ref : '#/definitions/models.Error'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"404" :
description : Not Found
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Get all metrics for a WireGuard Portal user.
tags :
- Metrics
/peer/by-id/{id}:
delete :
operationId : peers_handleDelete
parameters :
- description : The peer identifier.
in : path
name : id
required : true
type : string
produces :
- application/json
responses :
"204" :
description : No content if deletion was successful.
"400" :
description : Bad Request
schema :
$ref : '#/definitions/models.Error'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"403" :
description : Forbidden
schema :
$ref : '#/definitions/models.Error'
"404" :
description : Not Found
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Delete the peer record.
tags :
- Peers
get :
description : Normal users can only access their own records. Admins can access all records.
operationId : peers_handleByIdGet
parameters :
- description : The peer identifier (public key).
in : path
name : id
required : true
type : string
produces :
- application/json
responses :
"200" :
description : OK
schema :
$ref : '#/definitions/models.Peer'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"403" :
description : Forbidden
schema :
$ref : '#/definitions/models.Error'
"404" :
description : Not Found
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Get a specific peer record by its identifier (public key).
tags :
- Peers
put :
2025-05-09 16:19:36 +02:00
description : Only admins can update existing records. The peer record must contain all required fields (e.g., public key, allowed IPs).
2025-03-29 16:42:31 +01:00
operationId : peers_handleUpdatePut
parameters :
- description : The peer identifier.
in : path
name : id
required : true
type : string
- description : The peer data.
in : body
name : request
required : true
schema :
$ref : '#/definitions/models.Peer'
produces :
- application/json
responses :
"200" :
description : OK
schema :
$ref : '#/definitions/models.Peer'
"400" :
description : Bad Request
schema :
$ref : '#/definitions/models.Error'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"403" :
description : Forbidden
schema :
$ref : '#/definitions/models.Error'
"404" :
description : Not Found
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Update a peer record.
tags :
- Peers
/peer/by-interface/{id}:
get :
operationId : peers_handleAllForInterfaceGet
parameters :
- description : The WireGuard interface identifier.
in : path
name : id
required : true
type : string
produces :
- application/json
responses :
"200" :
description : OK
schema :
items :
$ref : '#/definitions/models.Peer'
type : array
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Get all peer records for a given WireGuard interface.
tags :
- Peers
/peer/by-user/{id}:
get :
description : Normal users can only access their own records. Admins can access all records.
operationId : peers_handleAllForUserGet
parameters :
- description : The user identifier.
in : path
name : id
required : true
type : string
produces :
- application/json
responses :
"200" :
description : OK
schema :
items :
$ref : '#/definitions/models.Peer'
type : array
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Get all peer records for a given user.
tags :
- Peers
/peer/new :
post :
2025-05-09 16:19:36 +02:00
description : Only admins can create new records. The peer record must contain all required fields (e.g., public key, allowed IPs).
2025-03-29 16:42:31 +01:00
operationId : peers_handleCreatePost
parameters :
- description : The peer data.
in : body
name : request
required : true
schema :
$ref : '#/definitions/models.Peer'
produces :
- application/json
responses :
"200" :
description : OK
schema :
$ref : '#/definitions/models.Peer'
"400" :
description : Bad Request
schema :
$ref : '#/definitions/models.Error'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"403" :
description : Forbidden
schema :
$ref : '#/definitions/models.Error'
"409" :
description : Conflict
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Create a new peer record.
tags :
- Peers
2025-05-09 16:19:36 +02:00
/peer/prepare/{id}:
get :
description : This endpoint is used to prepare a new peer record. The returned data contains a fresh key pair and valid ip address.
operationId : peers_handlePrepareGet
parameters :
- description : The interface identifier.
in : path
name : id
required : true
type : string
produces :
- application/json
responses :
"200" :
description : OK
schema :
$ref : '#/definitions/models.Peer'
"400" :
description : Bad Request
schema :
$ref : '#/definitions/models.Error'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"403" :
description : Forbidden
schema :
$ref : '#/definitions/models.Error'
"404" :
description : Not Found
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Prepare a new peer record for the given WireGuard interface.
tags :
- Peers
2025-03-29 16:42:31 +01:00
/provisioning/data/peer-config :
get :
description : Normal users can only access their own record. Admins can access all records.
operationId : provisioning_handlePeerConfigGet
parameters :
- description : The peer identifier (public key) that should be queried.
in : query
name : PeerId
required : true
type : string
produces :
- text/plain
- application/json
responses :
"200" :
description : The WireGuard configuration file
schema :
type : string
"400" :
description : Bad Request
schema :
$ref : '#/definitions/models.Error'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"403" :
description : Forbidden
schema :
$ref : '#/definitions/models.Error'
"404" :
description : Not Found
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Get the peer configuration in wg-quick format.
tags :
- Provisioning
/provisioning/data/peer-qr :
get :
description : Normal users can only access their own record. Admins can access all records.
operationId : provisioning_handlePeerQrGet
parameters :
- description : The peer identifier (public key) that should be queried.
in : query
name : PeerId
required : true
type : string
produces :
- image/png
- application/json
responses :
"200" :
description : The WireGuard configuration QR code
schema :
type : file
"400" :
description : Bad Request
schema :
$ref : '#/definitions/models.Error'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"403" :
description : Forbidden
schema :
$ref : '#/definitions/models.Error'
"404" :
description : Not Found
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Get the peer configuration as QR code.
tags :
- Provisioning
/provisioning/data/user-info :
get :
description : Normal users can only access their own record. Admins can access all records.
operationId : provisioning_handleUserInfoGet
parameters :
- description : The user identifier that should be queried. If not set, the authenticated user is used.
in : query
name : UserId
type : string
- description : The email address that should be queried. If UserId is set, this is ignored.
in : query
name : Email
type : string
produces :
- application/json
responses :
"200" :
description : OK
schema :
$ref : '#/definitions/models.UserInformation'
"400" :
description : Bad Request
schema :
$ref : '#/definitions/models.Error'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"403" :
description : Forbidden
schema :
$ref : '#/definitions/models.Error'
"404" :
description : Not Found
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Get information about all peer records for a given user.
tags :
- Provisioning
/provisioning/new-peer :
post :
description : Normal users can only create new peers if self provisioning is allowed. Admins can always add new peers.
operationId : provisioning_handleNewPeerPost
parameters :
- description : Provisioning request model.
in : body
name : request
required : true
schema :
$ref : '#/definitions/models.ProvisioningRequest'
produces :
- application/json
responses :
"200" :
description : OK
schema :
$ref : '#/definitions/models.Peer'
"400" :
description : Bad Request
schema :
$ref : '#/definitions/models.Error'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"403" :
description : Forbidden
schema :
$ref : '#/definitions/models.Error'
"404" :
description : Not Found
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Create a new peer for the given interface and user.
tags :
- Provisioning
/user/all :
get :
operationId : users_handleAllGet
produces :
- application/json
responses :
"200" :
description : OK
schema :
items :
$ref : '#/definitions/models.User'
type : array
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Get all user records.
tags :
- Users
/user/by-id/{id}:
delete :
operationId : users_handleDelete
parameters :
- description : The user identifier.
in : path
name : id
required : true
type : string
produces :
- application/json
responses :
"204" :
description : No content if deletion was successful.
"400" :
description : Bad Request
schema :
$ref : '#/definitions/models.Error'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"403" :
description : Forbidden
schema :
$ref : '#/definitions/models.Error'
"404" :
description : Not Found
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Delete the user record.
tags :
- Users
get :
description : Normal users can only access their own record. Admins can access all records.
operationId : users_handleByIdGet
parameters :
- description : The user identifier.
in : path
name : id
required : true
type : string
produces :
- application/json
responses :
"200" :
description : OK
schema :
$ref : '#/definitions/models.User'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"403" :
description : Forbidden
schema :
$ref : '#/definitions/models.Error'
"404" :
description : Not Found
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Get a specific user record by its internal identifier.
tags :
- Users
put :
description : Only admins can update existing records.
operationId : users_handleUpdatePut
parameters :
- description : The user identifier.
in : path
name : id
required : true
type : string
- description : The user data.
in : body
name : request
required : true
schema :
$ref : '#/definitions/models.User'
produces :
- application/json
responses :
"200" :
description : OK
schema :
$ref : '#/definitions/models.User'
"400" :
description : Bad Request
schema :
$ref : '#/definitions/models.Error'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"403" :
description : Forbidden
schema :
$ref : '#/definitions/models.Error'
"404" :
description : Not Found
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Update a user record.
tags :
- Users
/user/new :
post :
description : Only admins can create new records.
operationId : users_handleCreatePost
parameters :
- description : The user data.
in : body
name : request
required : true
schema :
$ref : '#/definitions/models.User'
produces :
- application/json
responses :
"200" :
description : OK
schema :
$ref : '#/definitions/models.User'
"400" :
description : Bad Request
schema :
$ref : '#/definitions/models.Error'
"401" :
description : Unauthorized
schema :
$ref : '#/definitions/models.Error'
"403" :
description : Forbidden
schema :
$ref : '#/definitions/models.Error'
"409" :
description : Conflict
schema :
$ref : '#/definitions/models.Error'
"500" :
description : Internal Server Error
schema :
$ref : '#/definitions/models.Error'
security :
- BasicAuth : [ ]
summary : Create a new user record.
tags :
- Users
2025-01-18 12:13:09 +01:00
swagger : "2.0"