> ## Documentation Index
> Fetch the complete documentation index at: https://www.billingserv.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# List VPN servers

> Returns the paginated VPN server list together with the ordered server-group representation used by VPN applications. The order of `server_groups` matches the order configured in VPN Deploy, and the order of each group's `servers` array matches the configured server order. Only online, enabled servers are included. Configured groups remain present when empty. An `Other` group is appended only when ungrouped available servers exist.



## OpenAPI

````yaml /api-reference/openapi.json get /vpn/servers/list
openapi: 3.1.0
info:
  title: BillingServ API V2
  description: >-
    Resources and tools for developers to integrate with the BillingServ v2 API.
    v1 is deprecated; use the v2 base URL and bearer-token authentication unless
    an endpoint states otherwise.
  version: '2.0'
servers:
  - url: https://demo.onlinebillingform.com/api/v2
    description: BillingServ demo API
security:
  - bearerAuth: []
tags:
  - name: Customer
  - name: Package
  - name: Group
  - name: Country
  - name: County
  - name: VPN
  - name: Invoice
  - name: Order
  - name: Module
  - name: Report
  - name: Marketing
  - name: Setting
  - name: Checkout
  - name: Usage
  - name: Support
  - name: Licensing
  - name: Webhooks
    description: Outbound events sent by BillingServ to a configured customer endpoint.
paths:
  /vpn/servers/list:
    get:
      tags:
        - VPN
      summary: List VPN servers
      description: >-
        Returns the paginated VPN server list together with the ordered
        server-group representation used by VPN applications. The order of
        `server_groups` matches the order configured in VPN Deploy, and the
        order of each group's `servers` array matches the configured server
        order. Only online, enabled servers are included. Configured groups
        remain present when empty. An `Other` group is appended only when
        ungrouped available servers exist.
      operationId: GET_vpn_servers_list
      parameters:
        - name: per_page
          in: query
          required: false
          description: >-
            Number of records returned in the `vpn_systems` pagination object.
            This does not paginate `server_groups`.
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 15
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                required:
                  - success
                  - vpn_systems
                  - server_groups
                properties:
                  success:
                    type: boolean
                    const: true
                  vpn_systems:
                    type: object
                    description: Paginated flat VPN server list.
                    required:
                      - data
                      - current_page
                      - first_page_url
                      - from
                      - last_page
                      - last_page_url
                      - next_page_url
                      - path
                      - per_page
                      - prev_page_url
                      - to
                      - total
                    properties:
                      data:
                        type: array
                        items:
                          type: object
                          required:
                            - id
                            - server_name
                            - ip_address
                            - ssh_port
                            - ssh_username
                            - max_connections
                            - vpn_type
                            - flag_countries
                            - status_online
                            - is_disabled
                            - connections_count
                          properties:
                            id:
                              type: integer
                            server_name:
                              type: string
                            ip_address:
                              type: string
                            ssh_port:
                              type: integer
                            ssh_username:
                              type: string
                            max_connections:
                              type:
                                - integer
                                - 'null'
                            vpn_type:
                              type: string
                              enum:
                                - openVPN
                                - wireguard
                                - amneziawg
                            flag_countries:
                              type: string
                            status_online:
                              type: integer
                              enum:
                                - 0
                                - 1
                            is_disabled:
                              type: boolean
                            connections_count:
                              type: integer
                              minimum: 0
                              description: >-
                                Number of current VPN connection records for
                                this server.
                      current_page:
                        type: integer
                        minimum: 1
                      first_page_url:
                        type: string
                        format: uri
                      from:
                        type:
                          - integer
                          - 'null'
                      last_page:
                        type: integer
                        minimum: 1
                      last_page_url:
                        type: string
                        format: uri
                      next_page_url:
                        type:
                          - string
                          - 'null'
                        format: uri
                      path:
                        type: string
                        format: uri
                      per_page:
                        type: integer
                        minimum: 1
                        maximum: 100
                      prev_page_url:
                        type:
                          - string
                          - 'null'
                        format: uri
                      to:
                        type:
                          - integer
                          - 'null'
                      total:
                        type: integer
                        minimum: 0
                  server_groups:
                    type: array
                    description: >-
                      Ordered VPN groups. Clients should preserve this array
                      order when displaying locations.
                    items:
                      type: object
                      additionalProperties: false
                      required:
                        - id
                        - name
                        - servers
                      properties:
                        id:
                          type: string
                          description: >-
                            Stable group UUID, or `other` for the conditional
                            ungrouped-server group.
                        name:
                          type: string
                        servers:
                          type: array
                          description: Available servers in their configured order.
                          items:
                            type: object
                            additionalProperties: false
                            required:
                              - id
                              - server_name
                              - ip_address
                              - vpn_type
                              - flag_countries
                              - status_online
                              - is_disabled
                              - connections_count
                            properties:
                              id:
                                type: integer
                              server_name:
                                type: string
                              ip_address:
                                type: string
                              vpn_type:
                                type: string
                                enum:
                                  - openVPN
                                  - wireguard
                                  - amneziawg
                              flag_countries:
                                type: string
                              status_online:
                                type: boolean
                              is_disabled:
                                type: boolean
                              connections_count:
                                type: integer
                                minimum: 0
                                description: >-
                                  Number of current VPN connection records for
                                  this server.
              example:
                success: true
                vpn_systems:
                  data:
                    - id: 30
                      server_name: Europe VPN 01
                      ip_address: 10.0.0.30
                      ssh_port: 22
                      ssh_username: root
                      max_connections: null
                      vpn_type: openVPN
                      flag_countries: AD
                      status_online: 1
                      is_disabled: false
                      connections_count: 1
                  current_page: 1
                  first_page_url: >-
                    https://demo.onlinebillingform.com/api/v2/vpn/servers/list?page=1
                  from: 1
                  last_page: 1
                  last_page_url: >-
                    https://demo.onlinebillingform.com/api/v2/vpn/servers/list?page=1
                  next_page_url: null
                  path: https://demo.onlinebillingform.com/api/v2/vpn/servers/list
                  per_page: 15
                  prev_page_url: null
                  to: 1
                  total: 1
                server_groups:
                  - id: c49f2148-adf3-469c-b1ca-5d68e28e7efb
                    name: Europe
                    servers: []
                  - id: f584646b-7a83-42e8-b444-30f26b1d7696
                    name: USA
                    servers:
                      - id: 30
                        server_name: Europe VPN 01
                        ip_address: 10.0.0.30
                        vpn_type: openVPN
                        flag_countries: AD
                        status_online: true
                        is_disabled: false
                        connections_count: 1
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
              example:
                success: false
                errors:
                  per_page:
                    - The per page field must not be greater than 100.
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                success: false
                errors: Invalid API Key
        '403':
          description: Authenticated key does not have permission for this endpoint
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                success: false
                errors: Insufficient permissions for this endpoint.
      security:
        - bearerAuth: []
components:
  schemas:
    ValidationErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          const: false
        errors:
          oneOf:
            - type: array
              items:
                type: string
            - type: object
              additionalProperties: true
            - type: string
      additionalProperties: true
    ErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          const: false
        errors:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
            - type: object
              additionalProperties: true
      additionalProperties: true
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key
      description: 'Use `Authorization: Bearer <live_api_key>`.'

````