curl --request POST \
--url https://console.advinservers.com/api/v1/client/ip-groups/{firewallIpGroup}/entries \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"value": "192.0.2.97, 192.0.2.98",
"comment": "Lambda Complex field terminals"
}
'import requests
url = "https://console.advinservers.com/api/v1/client/ip-groups/{firewallIpGroup}/entries"
payload = {
"value": "192.0.2.97, 192.0.2.98",
"comment": "Lambda Complex field terminals"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({value: '192.0.2.97, 192.0.2.98', comment: 'Lambda Complex field terminals'})
};
fetch('https://console.advinservers.com/api/v1/client/ip-groups/{firewallIpGroup}/entries', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://console.advinservers.com/api/v1/client/ip-groups/{firewallIpGroup}/entries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'value' => '192.0.2.97, 192.0.2.98',
'comment' => 'Lambda Complex field terminals'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://console.advinservers.com/api/v1/client/ip-groups/{firewallIpGroup}/entries"
payload := strings.NewReader("{\n \"value\": \"192.0.2.97, 192.0.2.98\",\n \"comment\": \"Lambda Complex field terminals\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://console.advinservers.com/api/v1/client/ip-groups/{firewallIpGroup}/entries")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"value\": \"192.0.2.97, 192.0.2.98\",\n \"comment\": \"Lambda Complex field terminals\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://console.advinservers.com/api/v1/client/ip-groups/{firewallIpGroup}/entries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"value\": \"192.0.2.97, 192.0.2.98\",\n \"comment\": \"Lambda Complex field terminals\"\n}"
response = http.request(request)
puts response.read_body{
"id": "145e6e6f-a6b0-4b9e-9060-2d4f017baff8",
"name": "Sector C lab",
"entries": [
{
"id": "90c1a65c-b273-44a4-ae39-9f9e3c08c8b7",
"value": "192.0.2.0/28",
"comment": "Anomalous Materials test lab LAN"
},
{
"id": "936a228e-b576-4779-892b-ac30590dbe18",
"value": "192.0.2.44",
"comment": "Black Mesa VPN gateway"
},
{
"id": "5e7a4e1f-ddd7-4c3a-90d0-777c8fd2d78c",
"value": "192.0.2.97",
"comment": "Lambda Complex field terminals"
},
{
"id": "ea38e96a-fcf8-4bf4-a31c-01daeb9a2ba8",
"value": "192.0.2.98",
"comment": "Lambda Complex field terminals"
}
],
"rules_count": 1,
"created_at": "2026-03-02T19:24:51+00:00",
"used_by": [
{
"id": "72a4a737-236f-456f-827f-6145d9c95727",
"name": "Lambda Complex ingress",
"rules_count": 1
}
]
}{
"message": "Unauthenticated."
}{
"message": "This API key is not allowed to do that in this team. It needs the \"snapshot.delete\" permission."
}{
"message": "Not found."
}{
"message": "The name field is required.",
"errors": {}
}{
"message": "Too Many Attempts."
}Add addresses to an IP group
Overview
Adds IPv4 or IPv6 addresses and CIDR ranges. Send value as one entry or several separated by commas, spaces or new lines. An optional comment is saved with every new entry. Express address spans such as 203.0.113.4-203.0.113.9 as CIDR ranges instead.
Existing entries are skipped. A group can hold up to 2048 entries. Returns the updated group and applies changes to affected servers in the background.
Permissions
Requires the firewall.update (Change the firewall) permission for the selected team. Resources outside that team return 404.
curl --request POST \
--url https://console.advinservers.com/api/v1/client/ip-groups/{firewallIpGroup}/entries \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"value": "192.0.2.97, 192.0.2.98",
"comment": "Lambda Complex field terminals"
}
'import requests
url = "https://console.advinservers.com/api/v1/client/ip-groups/{firewallIpGroup}/entries"
payload = {
"value": "192.0.2.97, 192.0.2.98",
"comment": "Lambda Complex field terminals"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({value: '192.0.2.97, 192.0.2.98', comment: 'Lambda Complex field terminals'})
};
fetch('https://console.advinservers.com/api/v1/client/ip-groups/{firewallIpGroup}/entries', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://console.advinservers.com/api/v1/client/ip-groups/{firewallIpGroup}/entries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'value' => '192.0.2.97, 192.0.2.98',
'comment' => 'Lambda Complex field terminals'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://console.advinservers.com/api/v1/client/ip-groups/{firewallIpGroup}/entries"
payload := strings.NewReader("{\n \"value\": \"192.0.2.97, 192.0.2.98\",\n \"comment\": \"Lambda Complex field terminals\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://console.advinservers.com/api/v1/client/ip-groups/{firewallIpGroup}/entries")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"value\": \"192.0.2.97, 192.0.2.98\",\n \"comment\": \"Lambda Complex field terminals\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://console.advinservers.com/api/v1/client/ip-groups/{firewallIpGroup}/entries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"value\": \"192.0.2.97, 192.0.2.98\",\n \"comment\": \"Lambda Complex field terminals\"\n}"
response = http.request(request)
puts response.read_body{
"id": "145e6e6f-a6b0-4b9e-9060-2d4f017baff8",
"name": "Sector C lab",
"entries": [
{
"id": "90c1a65c-b273-44a4-ae39-9f9e3c08c8b7",
"value": "192.0.2.0/28",
"comment": "Anomalous Materials test lab LAN"
},
{
"id": "936a228e-b576-4779-892b-ac30590dbe18",
"value": "192.0.2.44",
"comment": "Black Mesa VPN gateway"
},
{
"id": "5e7a4e1f-ddd7-4c3a-90d0-777c8fd2d78c",
"value": "192.0.2.97",
"comment": "Lambda Complex field terminals"
},
{
"id": "ea38e96a-fcf8-4bf4-a31c-01daeb9a2ba8",
"value": "192.0.2.98",
"comment": "Lambda Complex field terminals"
}
],
"rules_count": 1,
"created_at": "2026-03-02T19:24:51+00:00",
"used_by": [
{
"id": "72a4a737-236f-456f-827f-6145d9c95727",
"name": "Lambda Complex ingress",
"rules_count": 1
}
]
}{
"message": "Unauthenticated."
}{
"message": "This API key is not allowed to do that in this team. It needs the \"snapshot.delete\" permission."
}{
"message": "Not found."
}{
"message": "The name field is required.",
"errors": {}
}{
"message": "Too Many Attempts."
}Authorizations
Your API key, sent as a bearer token. Create one in the control panel under API Keys, give it only the permissions the integration needs, and copy it when it is created. It cannot be shown again. Each key is restricted to one owned team. The key determines the team for every request.
Path Parameters
The firewall ip group UUID
"145e6e6f-a6b0-4b9e-9060-2d4f017baff8"
Body
Send a JSON object containing the fields below. Required fields are marked in the schema.
Response
The record, as a JSON object. There is no envelope.
A named list of addresses a customer points firewall rules at.
The id ID.
"145e6e6f-a6b0-4b9e-9060-2d4f017baff8"
The name shown to customers.
"Sector C lab"
The value of entries.
Show child attributes
Show child attributes
[
{
"id": "90c1a65c-b273-44a4-ae39-9f9e3c08c8b7",
"value": "192.0.2.0/28",
"comment": "Anomalous Materials test lab LAN"
},
{
"id": "936a228e-b576-4779-892b-ac30590dbe18",
"value": "192.0.2.44",
"comment": "Black Mesa VPN gateway"
}
]
How many firewall rules point at this group - what makes it unsafe to delete, so the list needs it even without the detail below.
1
The date and time for created at, in UTC.
"2026-03-02T19:24:51+00:00"
Which firewall groups use this one, named.
Show child attributes
Show child attributes