Skip to content

Instantly share code, notes, and snippets.

@2-click
Last active April 6, 2025 18:28
Show Gist options
  • Save 2-click/d3267354648bd6175db78ef171472e1d to your computer and use it in GitHub Desktop.
Save 2-click/d3267354648bd6175db78ef171472e1d to your computer and use it in GitHub Desktop.
Getting NordVPN Wireguard Keys from API with powershell
  1. Go to https://my.nordaccount.com/dashboard/nordvpn/manual-configuration/ and create an access token
  2. Copy token
  3. Use powershell to get Wireguard key
$username = "token"
$password = "<token goes here>"
$pair = "$($username):$($Password)"
$bytes = [System.Text.Encoding]::ASCII.GetBytes($pair)
$encodedCredentials = [Convert]::ToBase64String($bytes)
$url = "https://api.nordvpn.com/v1/users/services/credentials"

$headers = @{
    Authorization = "Basic $encodedCredentials"
}

Invoke-RestMethod -Uri $url -Headers $headers -Method Get

id                   : xxxx
created_at           : xxxx
updated_at           : xxxx
username             : xxxxx
password             : xxxxx
nordlynx_private_key : xxxx
  1. Use powershell to get recommended server:
$server = Invoke-RestMethod -Uri "https://api.nordvpn.com/v1/servers/recommendations?&filters[servers_technologies][identifier]=wireguard_udp&limit=1"

$server | ForEach-Object {
    $wireguardTech = $_.technologies | Where-Object { $_.identifier -eq 'wireguard_udp' }
    if ($wireguardTech) {
        # Extract metadata values
        $publicKey = $wireguardTech.metadata | Where-Object { $_.name -eq 'public_key' } | Select-Object -ExpandProperty value
        
        # Output with additional metadata columns
        [pscustomobject]@{
            Name           = $_.name
            Load           = $_.load
            Station        = $_.Station
            TechnologyID   = $wireguardTech.id
            TechnologyName = $wireguardTech.name
            Identifier     = $wireguardTech.identifier
            CreatedAt      = $wireguardTech.created_at
            UpdatedAt      = $wireguardTech.updated_at
            PublicKey      = $publicKey
        }
    }
}

Name           : Germany xxx
Load           : 13
Station        : xx.xxx.xx.xxx
TechnologyID   : 35
TechnologyName : Wireguard
Identifier     : wireguard_udp
CreatedAt      : 2019-02-14 14:08:43
UpdatedAt      : 2019-02-14 14:08:43
PublicKey      : xxxxxx
@N1c074
Copy link

N1c074 commented Jan 30, 2025

It worked, thank you so much, you were amazing. Now I'll try to follow a guide in English, to put everything on a Linksys WRT3200ACM "Firmware versionDD-WRT v3.0-r59302 std (01/22/25)". If I have problems can I always write here? Thank you very much

@madamson747
Copy link

The scripts worked great for me. Thanks. :)

@MLSci
Copy link

MLSci commented Feb 25, 2025

This is much easier to use than the Linux method

@psycho-realm
Copy link

First of all, thank you for sharing this information! Your work is really helpful.

I have a quick question: Do you experience any issues when a server reaches a high “load”? For example, does it affect performance, or are there mechanisms in place to balance the load?

Also, do you happen to know which country in Europe is the best in terms of VPN security and speed? I assume Switzerland might be a good choice, but I’d love to hear your thoughts.

Looking forward to your insights!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment