Hello,
I'm one of the Mullvad refugees. While I tried it for a few weeks now, using a peer-to-peer protocol without a forwarded port was just too slow and often it was even impossible to establish connections to peers.
And although I'm very happy with your service and the general scope of the API, there are some things that are broken or that I'm missing:
Setting device names and descriptions via the API.
Assigning ports to devices via the API (preferable by ID and name, but most importantly by ID), maybe also claiming ports via the API.
In my tests calls to the configuration generator API with "resolve=on" would only work for IPv4 endpoints, not for IPv6 endpoints. It would be great if this also worked for IPv6 addresses.
It seems a bit strange to me that adding a device returns a longer ID, while the other parts of the API which use the ID seem to truncate it to 50 characters. Why isn't the truncated ID returned uniformly?
It would be nice for my use-case to also have the configuration generator optionally return JSON. The current configurations are to be consumed by wg-quick and while using wg-quick (either to load them or to transform them to wg rules) or parsing them and using them with wg is easy enough, it would just be nice to have the additional option. Maybe with some nice clean key names like "public_key".
Example request for the mentioned IP resolution problem:
curl -H "Api-Key: <REDACTED>" "https://airvpn.org/api/generator/?protocols=wireguard_1_udp_1637&servers=europe&device=default&resolve=on&iplayer_entry=ipv6" -o AirVPN_Europe_UDP-1637.conf
This will properly resolve the hostname to an IP when "iplayer_entry=ipv4" (or the empty default) is set, but just pass the hostname through when "iplayer_entry=ipv6" is specified.