---
title: Cloud Panel API — networks
slug: cloud-panel-api-networks
createdAt: 2026-11-02T08:43:09.172Z
---

A network is what actually receives DNS traffic. Creating it is not enough: it must be **bound to a policy and a DNS resolver**.

## Network types

| **Type**            | **Endpoint**                                                     | **Body**                                                                                                                                                                                             | **Notes**                                         |
| ------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- |
| Static single IP    | <font color="#EF4444">`POST /network/v1/static/single`</font>    | <font color="#EF4444">`name`</font>, <font color="#EF4444">`note`</font>, <font color="#EF4444">`organizationId`</font>, <font color="#EF4444">`ip`</font>                                           | Public WAN IP (v4 or v6). LAN IPs rejected        |
| Static CIDR         | <font color="#EF4444">`POST /network/v1/static/cidr`</font>      | <font color="#EF4444">`name`</font>, <font color="#EF4444">`note`</font>, <font color="#EF4444">`organizationId`</font>, <font color="#EF4444">`cidr`</font>                                         | e.g. <font color="#EF4444">`19.16.31.0/24`</font> |
| Static range        | <font color="#EF4444">`POST /network/v1/static/range`</font>     | <font color="#EF4444">`name`</font>, <font color="#EF4444">`note`</font>, <font color="#EF4444">`organizationId`</font>, <font color="#EF4444">`range Ip: {start, end}`</font>                       | IPv4 only                                         |
| Dynamic (DDNS)      | <font color="#EF4444">`POST /network/v1/dynamic/internal`</font> | <font color="#EF4444">`name`</font>, <font color="#EF4444">`note`</font>, <font color="#EF4444">`organizationId`</font>, <font color="#EF4444">`ddns: {username, password}`</font>                   | For changing public IPs                           |
| Encrypted (DoH/DoT) | <font color="#EF4444">`POST /network/v1/encrypted`</font>        | <font color="#EF4444">`name`</font>, <font color="#EF4444">`note`</font>, <font color="#EF4444">`organizationId`</font>, <font color="#EF4444">`policyId`</font>, <font color="#EF4444">`tag`</font> | Policy bound at creation; returns DoH/DoT URLs    |

```curl
# Static single IP
curl -X POST 'https://core.fsflt.net/network/v1/static/single' \
  -H 'x-api-key: YOUR_CLOUD_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "Headquarter",
    "note": "Main office WAN",
    "organizationId": "019f88ef-7fb5-725c-88e8-0d7028d1b392",
    "ip": "203.0.113.24"
  }'
```

```json
{
  "id": "0199e74b-70d9-7b80-b138-36ae8c1ca3b3",
  "name": "Headquarter",
  "note": "Main office WAN",
  "organizationId": "019f88ef-7fb5-725c-88e8-0d7028d1b392",
  "type": "STATIC_SINGLE",
  "ip": "203.0.113.24",
  "createdAt": "2026-10-27T09:55:05.049Z",
  "updatedAt": "2026-10-27T09:55:05.049Z"
}
```

Other bodies:

```curl
# Static CIDR
curl -X POST 'https://core.fsflt.net/network/v1/static/cidr' \
  -H 'x-api-key: YOUR_CLOUD_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "Branch CIDR",
    "note": "Branch offices",
    "organizationId": "019f88ef-7fb5-725c-88e8-0d7028d1b392",
    "cidr": "198.51.100.0/24"
  }'

# Static range
curl -X POST 'https://core.fsflt.net/network/v1/static/range' \
  -H 'x-api-key: YOUR_CLOUD_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "ISP pool",
    "organizationId": "019f88ef-7fb5-725c-88e8-0d7028d1b392",
    "rangeIp": { "start": "151.24.10.1", "end": "151.24.19.254" }
  }'

# Dynamic internal (DDNS)
curl -X POST 'https://core.fsflt.net/network/v1/dynamic/internal' \
  -H 'x-api-key: YOUR_CLOUD_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "Home office",
    "organizationId": "019f88ef-7fb5-725c-88e8-0d7028d1b392",
    "ddns": { "username": "customer09122", "password": "a-strong-password" }
  }'

# Encrypted (DoH / DoT)
curl -X POST 'https://core.fsflt.net/network/v1/encrypted' \
  -H 'x-api-key: YOUR_CLOUD_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "Roaming laptops",
    "organizationId": "019f88ef-7fb5-725c-88e8-0d7028d1b392",
    "policyId": "0199e88b-5ca8-7b03-a3fd-0b051e38e1c7",
    "tag": "abcdef123"
  }'
```

Encrypted networks return the <font color="#EF4444">`tag`</font> used to build the endpoints (<font color="#EF4444">`https://doh.flashstart.com/<tag>`</font>, <font color="#EF4444">`https://<tag>.dot.flashstart.com`</font>).

## Bind policy and DNS to the network

This is the step that actually activates filtering. Pick a free resolver, then bind.

```curl
# 1. Resolvers available for this network
curl 'https://core.fsflt.net/network/v1/0199e74b-70d9-7b80-b138-36ae8c1ca3b3/dns/available' \
  -H 'x-api-key: YOUR_CLOUD_API_KEY'

# 2. Bind policy + DNS
curl -X POST 'https://core.fsflt.net/network/v1/0199e74b-70d9-7b80-b138-36ae8c1ca3b3/policies' \
  -H 'x-api-key: YOUR_CLOUD_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "policyId": "0199e88b-5ca8-7b03-a3fd-0b051e38e1c7",
    "dnsId": "0182e9f8-9bdf-47ea-99e1-632498e17169"
  }'
```

```json
{
  "networkId": "0199e74b-70d9-7b80-b138-36ae8c1ca3b3",
  "note": null,
  "policy": {
    "id": "0199e88b-5ca8-7b03-a3fd-0b051e38e1c7",
    "name": "Default Policy",
    "organizationId": "019f88ef-7fb5-725c-88e8-0d7028d1b392",
    "isShared": false,
    "isLimited": false
  },
  "dns": {
    "id": "0182e9f8-9bdf-47ea-99e1-632498e17169",
    "port": 5404,
    "primaryDNSv4": "185.236.104.154",
    "secondaryDNSv4": "185.236.105.155",
    "primaryDNSv6": "2a12:7bc0:104:154::",
    "secondaryDNSv6": "2a12:7bc0:105:155::"
  }
}
```

The dnsblock is what you hand to the customer's router/firewall: <font color="#EF4444">`primaryDNSv4`</font>/ <font color="#EF4444">`secondaryDNSv4`</font>(and the IPv6 equivalents).

:::hint{type="info"}
A network can be bound to **multiple policies** through different DNS resolvers — useful for "multi-profile" setups where different subnets resolve through different DNS pairs. Bind again with the same <font color="#EF4444">`networkId`</font> and a different <font color="#EF4444">`policyId`</font> + <font color="#EF4444">`dnsId`</font>. To detach: `DELETE /network/v1/{networkId}/policies/{policyId}`.
:::

## Verify

```curl
# All networks of the tenant, with their bindings
curl 'https://core.fsflt.net/network/v1?organizationId=019f88ef-7fb5-725c-88e8-0d7028d1b392&includePolicies=true' \
  -H 'x-api-key: YOUR_CLOUD_API_KEY'

# Single network
curl 'https://core.fsflt.net/network/v1/0199e74b-70d9-7b80-b138-36ae8c1ca3b3?includePolicies=true' \
  -H 'x-api-key: YOUR_CLOUD_API_KEY'

# Bindings of a network
curl 'https://core.fsflt.net/network/v1/0199e74b-70d9-7b80-b138-36ae8c1ca3b3/policies' \
  -H 'x-api-key: YOUR_CLOUD_API_KEY'
```

A network without any entry in <font color="#EF4444">`/policies`</font> receives **no filtering**, even though it exists and is visible in the panel. Always verify the binding.

## Updating and deleting

| **Operation**         | **Endpoint**                                                                  |
| --------------------- | ----------------------------------------------------------------------------- |
| Edit static single    | <font color="#EF4444">`PATCH /network/v1/static/single/{networkId}`</font>    |
| Edit static CIDR      | <font color="#EF4444">`PATCH /network/v1/static/cidr/{networkId}`</font>      |
| Edit static range     | <font color="#EF4444">`PATCH /network/v1/static/range/{networkId}`</font>     |
| Edit dynamic internal | <font color="#EF4444">`PATCH /network/v1/dynamic/internal/{networkId}`</font> |
| Edit encrypted        | <font color="#EF4444">`PATCH /network/v1/encrypted/{networkId}`</font>        |
| Delete any network    | <font color="#EF4444">`DELETE /network/v1/{networkId}`</font>                 |

