IP Blocks

Add IPv4 addresses to an IP block

POST/connectivity/ipblocks/{blockId}/ipv4

Add addresses to an IPv4 block, as a start to end range or as a network given by address and prefix. An address already in a block stays where it is and is counted.

Request

Authorization
Provide your bearer token in the Authorization header when making requests to protected resources.
Example: Authorization: Bearer ********************
Path Params#
blockIdinteger#required

A valid IPv4 block ID as shown in VirtFusion.

Example: 1
Body Paramsapplication/json#

Either a range or a network.

object
typestring#required

range for start and end; cidr for address and prefix.

Allowed values:rangecidr
startstring#

First address of the range (range form).

endstring#

Last address of the range, the same as or higher than start (range form).

addressstring#

Any address inside the network (network form).

prefixinteger#

Prefix length of the network, from 16 to 30 (network form).

Range: 16 to 30
hostsOnlyboolean#

Leave out the network and broadcast addresses, which the network form otherwise adds like the admin page does (network form).

Default: false
Examples
{
    "type": "range",
    "start": "192.168.4.200",
    "end": "192.168.5.20"
}
{
    "type": "cidr",
    "address": "192.168.10.0",
    "prefix": 24,
    "hostsOnly": true
}

Request Code Samples

Showing the A range across an octet boundary example from Body Params.
curl --location --request POST 'https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4' \
--header 'Authorization: Bearer <token>' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
    "type": "range",
    "start": "192.168.4.200",
    "end": "192.168.5.20"
}'
wget --quiet --output-document=- \
  --method=POST \
  --header='Authorization: Bearer <token>' \
  --header='Accept: application/json' \
  --header='Content-Type: application/json' \
  --body-data='{
    "type": "range",
    "start": "192.168.4.200",
    "end": "192.168.5.20"
}' \
  'https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4'
http POST 'https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4' \
  'Authorization: Bearer <token>' \
  'Accept: application/json' \
  'Content-Type: application/json' <<< '{
    "type": "range",
    "start": "192.168.4.200",
    "end": "192.168.5.20"
}'
const response = await fetch("https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4", {
    method: "POST",
    headers: {
        "Authorization": "Bearer <token>",
        "Accept": "application/json",
        "Content-Type": "application/json",
    },
    body: JSON.stringify({
        "type": "range",
        "start": "192.168.4.200",
        "end": "192.168.5.20"
    }),
});

const data = await response.json();
console.log(response.status, data);
import axios from "axios";

const response = await axios({
    method: "post",
    url: "https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4",
    headers: {
        "Authorization": "Bearer <token>",
        "Accept": "application/json",
        "Content-Type": "application/json",
    },
    data: {
        "type": "range",
        "start": "192.168.4.200",
        "end": "192.168.5.20"
    },
});

console.log(response.status, response.data);
const https = require("https");

const payload = JSON.stringify({
    "type": "range",
    "start": "192.168.4.200",
    "end": "192.168.5.20"
});

const req = https.request({
    hostname: "cp.domain.com",
    path: "/api/v1/connectivity/ipblocks/1/ipv4",
    method: "POST",
    headers: {
        "Authorization": "Bearer <token>",
        "Accept": "application/json",
        "Content-Type": "application/json",
        "Content-Length": Buffer.byteLength(payload),
    },
}, (res) => {
    let data = "";
    res.on("data", (chunk) => (data += chunk));
    res.on("end", () => console.log(res.statusCode, JSON.parse(data)));
});

req.on("error", (err) => console.error(err));
req.write(payload);
req.end();
import requests

url = "https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4"
headers = {
    "Authorization": "Bearer <token>",
    "Accept": "application/json",
    "Content-Type": "application/json",
}
payload = {
    "type": "range",
    "start": "192.168.4.200",
    "end": "192.168.5.20",
}

response = requests.request("POST", url, headers=headers, json=payload)

print(response.status_code)
print(response.json())
import http.client
import json

conn = http.client.HTTPSConnection("cp.domain.com")
headers = {
    "Authorization": "Bearer <token>",
    "Accept": "application/json",
    "Content-Type": "application/json",
}
payload = json.dumps({
    "type": "range",
    "start": "192.168.4.200",
    "end": "192.168.5.20",
})

conn.request("POST", "/api/v1/connectivity/ipblocks/1/ipv4", payload, headers)
response = conn.getresponse()

print(response.status)
print(json.loads(response.read()))
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => json_encode([
        'type' => 'range',
        'start' => '192.168.4.200',
        'end' => '192.168.5.20',
    ]),
    CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer <token>',
        'Accept: application/json',
        'Content-Type: application/json'
    ),
));

$response = curl_exec($curl);
curl_close($curl);

echo $response;
<?php

require 'vendor/autoload.php';

use GuzzleHttp\Client;

$client = new Client();

$response = $client->request('POST', 'https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4', [
    'headers' => [
        'Authorization' => 'Bearer <token>',
        'Accept' => 'application/json',
    ],
    'json' => [
        'type' => 'range',
        'start' => '192.168.4.200',
        'end' => '192.168.5.20',
    ],
]);

echo $response->getStatusCode() . "\n";
echo $response->getBody();
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    url := "https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4"
    payload := strings.NewReader(`{
    "type": "range",
    "start": "192.168.4.200",
    "end": "192.168.5.20"
}`)
    req, _ := http.NewRequest("POST", url, payload)
    req.Header.Add("Authorization", "Bearer <token>")
    req.Header.Add("Accept", "application/json")
    req.Header.Add("Content-Type", "application/json")

    res, err := http.DefaultClient.Do(req)
    if err != nil {
        panic(err)
    }
    defer res.Body.Close()

    body, _ := io.ReadAll(res.Body)
    fmt.Println(res.StatusCode, string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4"))
            .header("Authorization", "Bearer <token>")
            .header("Accept", "application/json")
            .header("Content-Type", "application/json")
            .method("POST", HttpRequest.BodyPublishers.ofString("{\"type\":\"range\",\"start\":\"192.168.4.200\",\"end\":\"192.168.5.20\"}"))
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.statusCode());
        System.out.println(response.body());
    }
}
import okhttp3.*;

public class Main {
    public static void main(String[] args) throws Exception {
        OkHttpClient client = new OkHttpClient();

        MediaType json = MediaType.get("application/json");
        RequestBody body = RequestBody.create("{\"type\":\"range\",\"start\":\"192.168.4.200\",\"end\":\"192.168.5.20\"}", json);

        Request request = new Request.Builder()
            .url("https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4")
            .method("POST", body)
            .addHeader("Authorization", "Bearer <token>")
            .addHeader("Accept", "application/json")
            .build();

        try (Response response = client.newCall(request).execute()) {
            System.out.println(response.code());
            System.out.println(response.body().string());
        }
    }
}
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;

var client = new HttpClient();
var request = new HttpRequestMessage(new HttpMethod("POST"), "https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", "<token>");
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
request.Content = new StringContent("{\"type\":\"range\",\"start\":\"192.168.4.200\",\"end\":\"192.168.5.20\"}", Encoding.UTF8, "application/json");

var response = await client.SendAsync(request);
Console.WriteLine((int)response.StatusCode);
Console.WriteLine(await response.Content.ReadAsStringAsync());
require "net/http"
require "json"

uri = URI("https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4")
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer <token>"
request["Accept"] = "application/json"
request["Content-Type"] = "application/json"
request.body = "{\"type\":\"range\",\"start\":\"192.168.4.200\",\"end\":\"192.168.5.20\"}"

response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
  http.request(request)
end

puts response.code
puts JSON.pretty_generate(JSON.parse(response.body))
import Foundation

var request = URLRequest(url: URL(string: "https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4")!)
request.httpMethod = "POST"
request.setValue("Bearer <token>", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Accept")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = "{\"type\":\"range\",\"start\":\"192.168.4.200\",\"end\":\"192.168.5.20\"}".data(using: .utf8)

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    guard let data = data, error == nil else { print(error ?? "request failed"); return }
    print((response as! HTTPURLResponse).statusCode)
    print(String(data: data, encoding: .utf8) ?? "")
}
task.resume()
// Cargo.toml: reqwest = { version = "0.12", features = ["blocking", "json"] }, serde_json = "1"
use reqwest::blocking::Client;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::new();
    let response = client
        .request(reqwest::Method::POST, "https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4")
        .bearer_auth("<token>")
        .header("Accept", "application/json")
        .header("Content-Type", "application/json")
        .body(r#"{
    "type": "range",
    "start": "192.168.4.200",
    "end": "192.168.5.20"
}"#)
        .send()?;

    println!("{}", response.status());
    let json: serde_json::Value = response.json()?;
    println!("{}", serde_json::to_string_pretty(&json)?);
    Ok(())
}
// Cargo.toml: reqwest = { version = "0.12", features = ["json"] }, tokio = { version = "1", features = ["full"] }, serde_json = "1"
use reqwest::Client;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::new();
    let response = client
        .request(reqwest::Method::POST, "https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4")
        .bearer_auth("<token>")
        .header("Accept", "application/json")
        .header("Content-Type", "application/json")
        .body(r#"{
    "type": "range",
    "start": "192.168.4.200",
    "end": "192.168.5.20"
}"#)
        .send()
        .await?;

    println!("{}", response.status());
    let json: serde_json::Value = response.json().await?;
    println!("{}", serde_json::to_string_pretty(&json)?);
    Ok(())
}
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody.Companion.toRequestBody

fun main() {
    val client = OkHttpClient()
    val body = """{
    "type": "range",
    "start": "192.168.4.200",
    "end": "192.168.5.20"
}""".toRequestBody("application/json".toMediaType())
    val request = Request.Builder()
        .url("https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4")
        .method("POST", body)
        .addHeader("Authorization", "Bearer <token>")
        .addHeader("Accept", "application/json")
        .build()

    client.newCall(request).execute().use { response ->
        println(response.code)
        println(response.body?.string())
    }
}
// pubspec.yaml: http: ^1.2.0
import 'dart:convert';
import 'package:http/http.dart' as http;

Future<void> main() async {
  final request = http.Request('POST', Uri.parse('https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4'));
  request.headers['Authorization'] = 'Bearer <token>';
  request.headers['Accept'] = 'application/json';
  request.headers['Content-Type'] = 'application/json';
  request.body = r'''{
    "type": "range",
    "start": "192.168.4.200",
    "end": "192.168.5.20"
}''';

  final response = await http.Response.fromStream(await request.send());
  print(response.statusCode);
  print(const JsonEncoder.withIndent('  ').convert(jsonDecode(response.body)));
}
#include <stdio.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (!curl) return 1;

    struct curl_slist *headers = NULL;
    headers = curl_slist_append(headers, "Authorization: Bearer <token>");
    headers = curl_slist_append(headers, "Accept: application/json");
    headers = curl_slist_append(headers, "Content-Type: application/json");

    curl_easy_setopt(curl, CURLOPT_URL, "https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4");
    curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"type\":\"range\",\"start\":\"192.168.4.200\",\"end\":\"192.168.5.20\"}");

    CURLcode result = curl_easy_perform(curl);
    if (result != CURLE_OK) fprintf(stderr, "%s\n", curl_easy_strerror(result));

    curl_slist_free_all(headers);
    curl_easy_cleanup(curl);
    return result == CURLE_OK ? 0 : 1;
}
$headers = @{
    Authorization = "Bearer <token>"
    Accept        = "application/json"
}

$body = @'
{
    "type": "range",
    "start": "192.168.4.200",
    "end": "192.168.5.20"
}
'@

$response = Invoke-RestMethod -Uri "https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4" -Method POST -Headers $headers -ContentType "application/json" -Body $body
$response | ConvertTo-Json -Depth 10
POST /api/v1/connectivity/ipblocks/1/ipv4 HTTP/1.1
Host: cp.domain.com
Authorization: Bearer <token>
Accept: application/json
Content-Type: application/json
Content-Length: 80

{
    "type": "range",
    "start": "192.168.4.200",
    "end": "192.168.5.20"
}
curl --location --request POST 'https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4' \
--header 'Authorization: Bearer <token>' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
    "type": "cidr",
    "address": "192.168.10.0",
    "prefix": 24,
    "hostsOnly": true
}'
wget --quiet --output-document=- \
  --method=POST \
  --header='Authorization: Bearer <token>' \
  --header='Accept: application/json' \
  --header='Content-Type: application/json' \
  --body-data='{
    "type": "cidr",
    "address": "192.168.10.0",
    "prefix": 24,
    "hostsOnly": true
}' \
  'https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4'
http POST 'https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4' \
  'Authorization: Bearer <token>' \
  'Accept: application/json' \
  'Content-Type: application/json' <<< '{
    "type": "cidr",
    "address": "192.168.10.0",
    "prefix": 24,
    "hostsOnly": true
}'
const response = await fetch("https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4", {
    method: "POST",
    headers: {
        "Authorization": "Bearer <token>",
        "Accept": "application/json",
        "Content-Type": "application/json",
    },
    body: JSON.stringify({
        "type": "cidr",
        "address": "192.168.10.0",
        "prefix": 24,
        "hostsOnly": true
    }),
});

const data = await response.json();
console.log(response.status, data);
import axios from "axios";

const response = await axios({
    method: "post",
    url: "https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4",
    headers: {
        "Authorization": "Bearer <token>",
        "Accept": "application/json",
        "Content-Type": "application/json",
    },
    data: {
        "type": "cidr",
        "address": "192.168.10.0",
        "prefix": 24,
        "hostsOnly": true
    },
});

console.log(response.status, response.data);
const https = require("https");

const payload = JSON.stringify({
    "type": "cidr",
    "address": "192.168.10.0",
    "prefix": 24,
    "hostsOnly": true
});

const req = https.request({
    hostname: "cp.domain.com",
    path: "/api/v1/connectivity/ipblocks/1/ipv4",
    method: "POST",
    headers: {
        "Authorization": "Bearer <token>",
        "Accept": "application/json",
        "Content-Type": "application/json",
        "Content-Length": Buffer.byteLength(payload),
    },
}, (res) => {
    let data = "";
    res.on("data", (chunk) => (data += chunk));
    res.on("end", () => console.log(res.statusCode, JSON.parse(data)));
});

req.on("error", (err) => console.error(err));
req.write(payload);
req.end();
import requests

url = "https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4"
headers = {
    "Authorization": "Bearer <token>",
    "Accept": "application/json",
    "Content-Type": "application/json",
}
payload = {
    "type": "cidr",
    "address": "192.168.10.0",
    "prefix": 24,
    "hostsOnly": True,
}

response = requests.request("POST", url, headers=headers, json=payload)

print(response.status_code)
print(response.json())
import http.client
import json

conn = http.client.HTTPSConnection("cp.domain.com")
headers = {
    "Authorization": "Bearer <token>",
    "Accept": "application/json",
    "Content-Type": "application/json",
}
payload = json.dumps({
    "type": "cidr",
    "address": "192.168.10.0",
    "prefix": 24,
    "hostsOnly": True,
})

conn.request("POST", "/api/v1/connectivity/ipblocks/1/ipv4", payload, headers)
response = conn.getresponse()

print(response.status)
print(json.loads(response.read()))
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => json_encode([
        'type' => 'cidr',
        'address' => '192.168.10.0',
        'prefix' => 24,
        'hostsOnly' => true,
    ]),
    CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer <token>',
        'Accept: application/json',
        'Content-Type: application/json'
    ),
));

$response = curl_exec($curl);
curl_close($curl);

echo $response;
<?php

require 'vendor/autoload.php';

use GuzzleHttp\Client;

$client = new Client();

$response = $client->request('POST', 'https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4', [
    'headers' => [
        'Authorization' => 'Bearer <token>',
        'Accept' => 'application/json',
    ],
    'json' => [
        'type' => 'cidr',
        'address' => '192.168.10.0',
        'prefix' => 24,
        'hostsOnly' => true,
    ],
]);

echo $response->getStatusCode() . "\n";
echo $response->getBody();
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    url := "https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4"
    payload := strings.NewReader(`{
    "type": "cidr",
    "address": "192.168.10.0",
    "prefix": 24,
    "hostsOnly": true
}`)
    req, _ := http.NewRequest("POST", url, payload)
    req.Header.Add("Authorization", "Bearer <token>")
    req.Header.Add("Accept", "application/json")
    req.Header.Add("Content-Type", "application/json")

    res, err := http.DefaultClient.Do(req)
    if err != nil {
        panic(err)
    }
    defer res.Body.Close()

    body, _ := io.ReadAll(res.Body)
    fmt.Println(res.StatusCode, string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4"))
            .header("Authorization", "Bearer <token>")
            .header("Accept", "application/json")
            .header("Content-Type", "application/json")
            .method("POST", HttpRequest.BodyPublishers.ofString("{\"type\":\"cidr\",\"address\":\"192.168.10.0\",\"prefix\":24,\"hostsOnly\":true}"))
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.statusCode());
        System.out.println(response.body());
    }
}
import okhttp3.*;

public class Main {
    public static void main(String[] args) throws Exception {
        OkHttpClient client = new OkHttpClient();

        MediaType json = MediaType.get("application/json");
        RequestBody body = RequestBody.create("{\"type\":\"cidr\",\"address\":\"192.168.10.0\",\"prefix\":24,\"hostsOnly\":true}", json);

        Request request = new Request.Builder()
            .url("https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4")
            .method("POST", body)
            .addHeader("Authorization", "Bearer <token>")
            .addHeader("Accept", "application/json")
            .build();

        try (Response response = client.newCall(request).execute()) {
            System.out.println(response.code());
            System.out.println(response.body().string());
        }
    }
}
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;

var client = new HttpClient();
var request = new HttpRequestMessage(new HttpMethod("POST"), "https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", "<token>");
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
request.Content = new StringContent("{\"type\":\"cidr\",\"address\":\"192.168.10.0\",\"prefix\":24,\"hostsOnly\":true}", Encoding.UTF8, "application/json");

var response = await client.SendAsync(request);
Console.WriteLine((int)response.StatusCode);
Console.WriteLine(await response.Content.ReadAsStringAsync());
require "net/http"
require "json"

uri = URI("https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4")
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer <token>"
request["Accept"] = "application/json"
request["Content-Type"] = "application/json"
request.body = "{\"type\":\"cidr\",\"address\":\"192.168.10.0\",\"prefix\":24,\"hostsOnly\":true}"

response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
  http.request(request)
end

puts response.code
puts JSON.pretty_generate(JSON.parse(response.body))
import Foundation

var request = URLRequest(url: URL(string: "https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4")!)
request.httpMethod = "POST"
request.setValue("Bearer <token>", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Accept")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = "{\"type\":\"cidr\",\"address\":\"192.168.10.0\",\"prefix\":24,\"hostsOnly\":true}".data(using: .utf8)

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    guard let data = data, error == nil else { print(error ?? "request failed"); return }
    print((response as! HTTPURLResponse).statusCode)
    print(String(data: data, encoding: .utf8) ?? "")
}
task.resume()
// Cargo.toml: reqwest = { version = "0.12", features = ["blocking", "json"] }, serde_json = "1"
use reqwest::blocking::Client;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::new();
    let response = client
        .request(reqwest::Method::POST, "https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4")
        .bearer_auth("<token>")
        .header("Accept", "application/json")
        .header("Content-Type", "application/json")
        .body(r#"{
    "type": "cidr",
    "address": "192.168.10.0",
    "prefix": 24,
    "hostsOnly": true
}"#)
        .send()?;

    println!("{}", response.status());
    let json: serde_json::Value = response.json()?;
    println!("{}", serde_json::to_string_pretty(&json)?);
    Ok(())
}
// Cargo.toml: reqwest = { version = "0.12", features = ["json"] }, tokio = { version = "1", features = ["full"] }, serde_json = "1"
use reqwest::Client;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::new();
    let response = client
        .request(reqwest::Method::POST, "https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4")
        .bearer_auth("<token>")
        .header("Accept", "application/json")
        .header("Content-Type", "application/json")
        .body(r#"{
    "type": "cidr",
    "address": "192.168.10.0",
    "prefix": 24,
    "hostsOnly": true
}"#)
        .send()
        .await?;

    println!("{}", response.status());
    let json: serde_json::Value = response.json().await?;
    println!("{}", serde_json::to_string_pretty(&json)?);
    Ok(())
}
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody.Companion.toRequestBody

fun main() {
    val client = OkHttpClient()
    val body = """{
    "type": "cidr",
    "address": "192.168.10.0",
    "prefix": 24,
    "hostsOnly": true
}""".toRequestBody("application/json".toMediaType())
    val request = Request.Builder()
        .url("https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4")
        .method("POST", body)
        .addHeader("Authorization", "Bearer <token>")
        .addHeader("Accept", "application/json")
        .build()

    client.newCall(request).execute().use { response ->
        println(response.code)
        println(response.body?.string())
    }
}
// pubspec.yaml: http: ^1.2.0
import 'dart:convert';
import 'package:http/http.dart' as http;

Future<void> main() async {
  final request = http.Request('POST', Uri.parse('https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4'));
  request.headers['Authorization'] = 'Bearer <token>';
  request.headers['Accept'] = 'application/json';
  request.headers['Content-Type'] = 'application/json';
  request.body = r'''{
    "type": "cidr",
    "address": "192.168.10.0",
    "prefix": 24,
    "hostsOnly": true
}''';

  final response = await http.Response.fromStream(await request.send());
  print(response.statusCode);
  print(const JsonEncoder.withIndent('  ').convert(jsonDecode(response.body)));
}
#include <stdio.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (!curl) return 1;

    struct curl_slist *headers = NULL;
    headers = curl_slist_append(headers, "Authorization: Bearer <token>");
    headers = curl_slist_append(headers, "Accept: application/json");
    headers = curl_slist_append(headers, "Content-Type: application/json");

    curl_easy_setopt(curl, CURLOPT_URL, "https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4");
    curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"type\":\"cidr\",\"address\":\"192.168.10.0\",\"prefix\":24,\"hostsOnly\":true}");

    CURLcode result = curl_easy_perform(curl);
    if (result != CURLE_OK) fprintf(stderr, "%s\n", curl_easy_strerror(result));

    curl_slist_free_all(headers);
    curl_easy_cleanup(curl);
    return result == CURLE_OK ? 0 : 1;
}
$headers = @{
    Authorization = "Bearer <token>"
    Accept        = "application/json"
}

$body = @'
{
    "type": "cidr",
    "address": "192.168.10.0",
    "prefix": 24,
    "hostsOnly": true
}
'@

$response = Invoke-RestMethod -Uri "https://cp.domain.com/api/v1/connectivity/ipblocks/1/ipv4" -Method POST -Headers $headers -ContentType "application/json" -Body $body
$response | ConvertTo-Json -Depth 10
POST /api/v1/connectivity/ipblocks/1/ipv4 HTTP/1.1
Host: cp.domain.com
Authorization: Bearer <token>
Accept: application/json
Content-Type: application/json
Content-Length: 94

{
    "type": "cidr",
    "address": "192.168.10.0",
    "prefix": 24,
    "hostsOnly": true
}

Responses

200

How many addresses were added, how many the block already had, how many belong to anoth…

#
application/json

How many addresses were added, how many the block already had, how many belong to another block, and the block's total afterwards.

object

The outcome of adding addresses to a block.

IPv4PopulateResult fields
createdinteger#

Addresses added now.

existinginteger#

Addresses the block already had.

elsewhereinteger#

Addresses that belong to another block and were left there.

totalinteger#

Addresses in the block afterwards.

Example
{
    "data": {
        "created": 254,
        "existing": 0,
        "elsewhere": 0,
        "total": 254
    }
}
401

The bearer token is missing, invalid, or expired. The response has no body.

#
No response body.
404

The IP block was not found.

#
application/json
msgstring#
Example
{
    "msg": "ip block not found"
}
409

The block is an IPv6 block, or another change to it is in progress.

#
application/json
errorsarray[string]#
Example
{
    "errors": [
        "addresses are added to IPv4 blocks only"
    ]
}
422

Validation failed, more than 65,536 addresses (a /16) were asked for, or an unknown fie…

#
application/json

Validation failed, more than 65,536 addresses (a /16) were asked for, or an unknown field was sent. Nothing was written.

errorsobject#
Example
{
    "errors": {
        "end": [
            "at most 65536 addresses per call"
        ]
    }
}
429

Too many requests. Either the token's requests per minute are used up (see the `X-RateL…

#
application/json

Too many requests. Either the token's requests per minute are used up (see the X-RateLimit-* headers) or the calling address has failed authentication 10 times in a minute (the body then includes retry_after_seconds). Retry-After gives the seconds to wait.

object
errorsarray[string]#
retry_after_secondsinteger#

Seconds to wait before retrying. Present on the failed-authentication limit only.

Response headers
Retry-Afterinteger

Seconds to wait before retrying.

X-RateLimit-Limitinteger

The token's requests per minute (token limit only).

X-RateLimit-Remaininginteger

Requests left in the current minute (token limit only).

X-RateLimit-Resetinteger

Unix timestamp at which the minute resets (token limit only).

Examples
{
    "errors": [
        "Too Many Requests"
    ]
}
{
    "errors": [
        "Too many authentication attempts. Try again later."
    ],
    "retry_after_seconds": 42
}

Changes

  • 7.1.0BreakingTakes type: cidr with address, prefix and hostsOnly as well as type: range. The range walks the whole address space between start and end instead of changing only the last octet. Answers 200 with created, existing, elsewhere and total counts instead of an empty 204, and refuses more than 65,536 addresses in one call.