basePath: /
definitions:
  main.Peer:
    properties:
      allowAccess:
        items:
          type: integer
        type: array
      allowInternet:
        type: boolean
      createdAt:
        type: string
      currentDataUsageBytes:
        description: CurrentDataUsageBytes tracks the amount of data used by this
          peer (in bytes)
        format: int64
        type: integer
      dataLimitGB:
        description: DataLimitGB defines the monthly data limit per peer (in GB).
          0 means unlimited.
        format: int64
        type: integer
      enabled:
        description: Enabled indicates whether the peer is active. Auto-restrict disables
          the peer if over the limit.
        type: boolean
      expiresAt:
        description: ExpiresAt defines when this peer should be considered expired
          and eligible for auto-deletion
        type: string
      id:
        type: integer
      ip:
        type: string
      publicKey:
        type: string
      serverID:
        type: integer
      updatedAt:
        type: string
    type: object
  main.SMTPSettings:
    properties:
      enabled:
        type: boolean
      fromEmail:
        type: string
      fromName:
        type: string
      id:
        type: integer
      password:
        type: string
      port:
        type: integer
      server:
        type: string
      useAuth:
        type: boolean
      useTLS:
        type: boolean
      username:
        type: string
    type: object
  main.Server:
    properties:
      createdAt:
        type: string
      endpoint:
        type: string
      id:
        type: integer
      mode:
        type: string
      name:
        type: string
      peers:
        items:
          $ref: '#/definitions/main.Peer'
        type: array
      publicKey:
        type: string
      updatedAt:
        type: string
      webhooks:
        items:
          $ref: '#/definitions/main.Webhook'
        type: array
    type: object
  main.Webhook:
    properties:
      createdAt:
        type: string
      customBody:
        type: string
      customHeaders:
        items:
          type: integer
        type: array
      defaultPayload:
        type: string
      id:
        type: integer
      isEnabled:
        type: boolean
      isGlobal:
        type: boolean
      name:
        type: string
      serverID:
        type: integer
      subscribedActions:
        items:
          type: integer
        type: array
      template:
        type: string
      updatedAt:
        type: string
      url:
        type: string
      verifySSL:
        type: boolean
    type: object
host: localhost:10087
info:
  contact:
    name: API Support
  description: WireGuard Control Plane with Dynamic Policy Firewall. REST API for
    managing WireGuard servers, peers, webhooks, SMTP settings, and real-time stats.
  title: WGRplane API
  version: "1.0"
paths:
  /api/peers/{id}:
    delete:
      description: Deletes a peer, cleans up nftables rules, and triggers webhooks.
      parameters:
      - description: Peer ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "204":
          description: No content
        "404":
          description: Not Found
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      summary: Delete a peer
      tags:
      - peers
    put:
      consumes:
      - application/json
      description: Updates a peer and computes diffs to apply incremental nftables
        changes.
      parameters:
      - description: Peer ID
        in: path
        name: id
        required: true
        type: string
      - description: Updated peer fields
        in: body
        name: peer
        required: true
        schema:
          $ref: '#/definitions/main.Peer'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/main.Peer'
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "404":
          description: Not Found
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      summary: Update a peer
      tags:
      - peers
  /api/peers/{id}/config:
    get:
      description: Downloads the WireGuard .conf file for a specific peer.
      parameters:
      - description: Peer ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - text/plain
      responses:
        "200":
          description: WireGuard configuration file
          schema:
            type: string
        "404":
          description: Not Found
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      summary: Get peer config
      tags:
      - peers
  /api/peers/{id}/qrcode:
    get:
      description: Returns a QR code PNG image of the peer config for mobile import.
      parameters:
      - description: Peer ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - image/png
      responses:
        "200":
          description: QR code PNG image
          schema:
            type: file
        "404":
          description: Not Found
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      summary: Get peer QR code
      tags:
      - peers
  /api/servers:
    get:
      consumes:
      - application/json
      description: Returns a list of all registered WireGuard servers.
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/main.Server'
            type: array
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      summary: List all servers
      tags:
      - servers
    post:
      consumes:
      - application/json
      description: Creates a new WireGuard server with the provided configuration.
      parameters:
      - description: Server configuration
        in: body
        name: server
        required: true
        schema:
          $ref: '#/definitions/main.Server'
      produces:
      - application/json
      responses:
        "201":
          description: Created
          schema:
            $ref: '#/definitions/main.Server'
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      summary: Create a server
      tags:
      - servers
  /api/servers/{id}:
    delete:
      description: Deletes a WireGuard server and cascade-removes its peers and webhooks.
      parameters:
      - description: Server ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "204":
          description: No content
        "404":
          description: Not Found
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      summary: Delete a server
      tags:
      - servers
    get:
      description: Returns a single WireGuard server by its ID.
      parameters:
      - description: Server ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/main.Server'
        "404":
          description: Not Found
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      summary: Get a server
      tags:
      - servers
    put:
      consumes:
      - application/json
      description: Updates fields of an existing WireGuard server.
      parameters:
      - description: Server ID
        in: path
        name: id
        required: true
        type: string
      - description: Updated server fields
        in: body
        name: server
        required: true
        schema:
          $ref: '#/definitions/main.Server'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/main.Server'
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "404":
          description: Not Found
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      summary: Update a server
      tags:
      - servers
  /api/servers/{id}/peers:
    get:
      description: Returns all peers belonging to a specific WireGuard server.
      parameters:
      - description: Server ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/main.Peer'
            type: array
        "404":
          description: Not Found
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      summary: List server peers
      tags:
      - peers
    post:
      consumes:
      - application/json
      description: Creates a new WireGuard peer. Applies nftables rules in forward
        mode or triggers webhooks in standalone mode.
      parameters:
      - description: Server ID
        in: path
        name: id
        required: true
        type: string
      - description: Peer configuration
        in: body
        name: peer
        required: true
        schema:
          $ref: '#/definitions/main.Peer'
      produces:
      - application/json
      responses:
        "201":
          description: Created
          schema:
            $ref: '#/definitions/main.Peer'
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "404":
          description: Not Found
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      summary: Create a peer
      tags:
      - peers
  /api/servers/{id}/stats:
    get:
      description: Returns per-server statistics including peer count and webhook
        count.
      parameters:
      - description: Server ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties: true
            type: object
        "404":
          description: Not Found
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      summary: Get server stats
      tags:
      - stats
  /api/servers/{id}/webhooks:
    get:
      description: Returns all webhooks configured for a specific WireGuard server.
      parameters:
      - description: Server ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/main.Webhook'
            type: array
        "404":
          description: Not Found
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      summary: List server webhooks
      tags:
      - webhooks
    post:
      consumes:
      - application/json
      description: Creates a new webhook configuration for a WireGuard server.
      parameters:
      - description: Server ID
        in: path
        name: id
        required: true
        type: string
      - description: Webhook configuration
        in: body
        name: webhook
        required: true
        schema:
          $ref: '#/definitions/main.Webhook'
      produces:
      - application/json
      responses:
        "201":
          description: Created
          schema:
            $ref: '#/definitions/main.Webhook'
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "404":
          description: Not Found
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      summary: Create a webhook
      tags:
      - webhooks
  /api/settings/smtp:
    get:
      description: Returns the current SMTP configuration for email notifications.
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/main.SMTPSettings'
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      summary: Get SMTP settings
      tags:
      - settings
    post:
      consumes:
      - application/json
      description: Saves or updates SMTP configuration for email notifications.
      parameters:
      - description: SMTP configuration
        in: body
        name: settings
        required: true
        schema:
          $ref: '#/definitions/main.SMTPSettings'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/main.SMTPSettings'
        "400":
          description: Bad Request
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      summary: Save SMTP settings
      tags:
      - settings
  /api/stats:
    get:
      description: Returns global statistics including total servers, peers, and webhooks.
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties:
              format: int64
              type: integer
            type: object
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      summary: Get global stats
      tags:
      - stats
  /api/webhooks/{id}:
    delete:
      description: Deletes a webhook by its ID.
      parameters:
      - description: Webhook ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "204":
          description: No content
        "404":
          description: Not Found
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal Server Error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      summary: Delete a webhook
      tags:
      - webhooks
securityDefinitions:
  ApiKeyAuth:
    in: header
    name: wg-rplane-datadunia
    type: apiKey
  BearerAuth:
    in: header
    name: Authorization
    type: apiKey
swagger: "2.0"
