Network configuration
Configure the on-appliance network stack: physical interfaces, Docker internal subnet, outbound proxy, NTP servers, SSL serving certificate, trusted CA bundle. All six endpoints carry a 1/sec/IP rate limit and several are ⚠️ Operationally Dangerous (see per-operation descriptions).
Configure a physical NIC on the broker:
interface_type=''— disable the interface.interface_type='dhcp'— enable DHCP.interface_type='static'— enable static configuration (additionally requiresaddressandnetmask;gatewayoptional).
⚠️ Operationally Dangerous. A bad configuration can render the VM unreachable. Console-recovery is required to undo a misconfiguration.
Short-lived (10-minute TTL) opaque API token issued by
generateToken. Sent as
Authorization: Bearer <token>. A token that expires mid-request
does NOT abort the response (DRF authenticates once at request
start).
When interface_type='static', both address and netmask
must additionally be non-empty (enforced by Pydantic's
_static_requires_address model validator).
'' disables the interface. 'dhcp' enables DHCP. 'static'
requires address and netmask.
Interface name (e.g., eth0, eth1).
IPv4 address. Required when interface_type='static'.
""IPv4 netmask. Required when interface_type='static'.
""Default gateway. Optional; at most one gateway is allowed across all interfaces.
""DNS servers (up to 8 entries).
[]Whether this interface serves the broker's admin UI.
falseOperation succeeded; response carries the empty envelope.
Canonical envelope for every successful (2xx) JSON response.
Wraps the per-endpoint payload (or null when the operation
carries no body content).
Endpoint-specific payload. Schema varies; see each
operation's 200.content.schema.
Request body failed Pydantic validation, or a semantic validation check (CIDR shape, PEM well-formedness, ...) failed in the handler.
Missing, malformed, or expired Bearer token.
InitialPasswordGateMiddleware blocked the request because the
factory-default admin password has not yet been replaced via
resetInitialPassword.
Operation conflicts with the appliance's current state: subnet overlap with an existing physical interface, interface already configured the requested way, gateway already set on another interface, etc.
Caller exceeded the per-IP rate limit on this endpoint (5/min on the two bootstrap endpoints, 1/sec on the six network endpoints).
Unexpected server-side failure; details captured in broker logs.
POST /public_api/v1/network/interface HTTP/1.1
Host: broker.example.local
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 56
{
"interface_type": "dhcp",
"name": "eth1",
"is_admin": false
}{
"reply": null
}Replace the parent address pool used by Docker's per-network allocator on the broker. Docker's allocator carves slices of width parent_prefix + DOCKER_SUBNET_ADDITIONAL_BITS (currently +2) from this pool — a /18 parent therefore yields /20 per-network bridges. To leave room for more than one per-network bridge, supply a parent prefix of /22 or wider.
⚠️ Operationally Dangerous. The Docker daemon is restarted, which restarts every container on the bridge network. Expect 30-60 seconds of broker-wide unavailability — including this PAPI itself, which will return 502/connection-refused during the window. Treat as fire-and-poll.
A subnet that overlaps an existing physical interface is rejected with 409.
Short-lived (10-minute TTL) opaque API token issued by
generateToken. Sent as
Authorization: Bearer <token>. A token that expires mid-request
does NOT abort the response (DRF authenticates once at request
start).
Body for setInternalSubnet. The docker_subnet is the parent address pool, not a single bridge subnet — see the endpoint description for pool semantics.
Parent address pool CIDR. Per-network bridges are carved
from this pool at parent_prefix + 2 width (e.g., a /18
yields /20 bridges).
172.20.0.0/18Operation succeeded; response carries the empty envelope.
Canonical envelope for every successful (2xx) JSON response.
Wraps the per-endpoint payload (or null when the operation
carries no body content).
Endpoint-specific payload. Schema varies; see each
operation's 200.content.schema.
Request body failed Pydantic validation, or a semantic validation check (CIDR shape, PEM well-formedness, ...) failed in the handler.
Missing, malformed, or expired Bearer token.
InitialPasswordGateMiddleware blocked the request because the
factory-default admin password has not yet been replaced via
resetInitialPassword.
Operation conflicts with the appliance's current state: subnet overlap with an existing physical interface, interface already configured the requested way, gateway already set on another interface, etc.
Caller exceeded the per-IP rate limit on this endpoint (5/min on the two bootstrap endpoints, 1/sec on the six network endpoints).
Unexpected server-side failure; details captured in broker logs.
POST /public_api/v1/network/internal_subnet HTTP/1.1
Host: broker.example.local
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 33
{
"docker_subnet": "172.20.0.0/18"
}{
"reply": null
}Configure the outbound proxy used by all broker services for upstream connectivity.
proxy_type=''disables the proxy.When
proxy_typeis set,hostandportare required.pwdfollows tristate semantics:omitted /
null— keep the existing stored password.""— clear the password."value"— set the password tovalue.
Side effect: triggers restart_services_and_applets() — services handling the in-flight API request are deliberately excluded so the response can return cleanly.
Short-lived (10-minute TTL) opaque API token issued by
generateToken. Sent as
Authorization: Bearer <token>. A token that expires mid-request
does NOT abort the response (DRF authenticates once at request
start).
pwd follows tristate semantics — omit (null) to preserve
the stored password, set to "" to clear it, set to a value
to replace it. When proxy_type is non-empty, both host and
port are required (cross-field rule, enforced server-side).
""""Tristate: null/absent = keep existing, "" = clear,
"value" = set.
Operation succeeded; response carries the empty envelope.
Canonical envelope for every successful (2xx) JSON response.
Wraps the per-endpoint payload (or null when the operation
carries no body content).
Endpoint-specific payload. Schema varies; see each
operation's 200.content.schema.
Request body failed Pydantic validation, or a semantic validation check (CIDR shape, PEM well-formedness, ...) failed in the handler.
Missing, malformed, or expired Bearer token.
InitialPasswordGateMiddleware blocked the request because the
factory-default admin password has not yet been replaced via
resetInitialPassword.
Caller exceeded the per-IP rate limit on this endpoint (5/min on the two bootstrap endpoints, 1/sec on the six network endpoints).
Unexpected server-side failure; details captured in broker logs.
POST /public_api/v1/network/proxy HTTP/1.1
Host: broker.example.local
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 99
{
"proxy_type": "http",
"host": "proxy.example.com",
"port": 3128,
"user": "broker-svc",
"pwd": "<password>"
}{
"reply": null
}Replace the broker's NTP server list. At least one entry is required, at most MAX_NTP_SERVERS (10).
Reachability is NOT pre-validated. Servers that are unreachable from the broker are silently accepted (parity with the WebUI). The broker reports NTP-sync failures through normal monitoring channels.
Short-lived (10-minute TTL) opaque API token issued by
generateToken. Sent as
Authorization: Bearer <token>. A token that expires mid-request
does NOT abort the response (DRF authenticates once at request
start).
Body for setNtp. Replaces the broker's NTP server list (between 1 and 10 entries).
Hostname or IP of an NTP server.
Operation succeeded; response carries the empty envelope.
Canonical envelope for every successful (2xx) JSON response.
Wraps the per-endpoint payload (or null when the operation
carries no body content).
Endpoint-specific payload. Schema varies; see each
operation's 200.content.schema.
Request body failed Pydantic validation, or a semantic validation check (CIDR shape, PEM well-formedness, ...) failed in the handler.
Missing, malformed, or expired Bearer token.
InitialPasswordGateMiddleware blocked the request because the
factory-default admin password has not yet been replaced via
resetInitialPassword.
Caller exceeded the per-IP rate limit on this endpoint (5/min on the two bootstrap endpoints, 1/sec on the six network endpoints).
Unexpected server-side failure; details captured in broker logs.
POST /public_api/v1/network/ntp HTTP/1.1
Host: broker.example.local
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 46
{
"ntp": [
"time.cloudflare.com",
"pool.ntp.org"
]
}{
"reply": null
}Install a custom private key + certificate-chain pair as the broker's HTTPS serving identity (replacing the self-signed default that ships with a fresh broker).
Both ssl_key and ssl_cert are base64-encoded PEM payloads. Each is capped at MAX_BASE64_CERT_BYTES (~1.4 MiB encoded) to bound the body size.
⚠️ Operationally Dangerous. The nginx serving cert is replaced; a malformed PEM may break HTTPS access (in-flight sessions remain valid; the next handshake uses the new cert).
Short-lived (10-minute TTL) opaque API token issued by
generateToken. Sent as
Authorization: Bearer <token>. A token that expires mid-request
does NOT abort the response (DRF authenticates once at request
start).
Body for setSslCertificate. The ssl_key and ssl_cert are base64-encoded PEM payloads, each capped at ~1.4 MiB encoded.
Base64-encoded PEM private key (capped at ~1.4 MiB encoded).
Base64-encoded PEM certificate chain (capped at ~1.4 MiB encoded).
Optional display name for the certificate (max 128 chars).
""Operation succeeded; response carries the empty envelope.
Canonical envelope for every successful (2xx) JSON response.
Wraps the per-endpoint payload (or null when the operation
carries no body content).
Endpoint-specific payload. Schema varies; see each
operation's 200.content.schema.
Request body failed Pydantic validation, or a semantic validation check (CIDR shape, PEM well-formedness, ...) failed in the handler.
Missing, malformed, or expired Bearer token.
InitialPasswordGateMiddleware blocked the request because the
factory-default admin password has not yet been replaced via
resetInitialPassword.
Caller exceeded the per-IP rate limit on this endpoint (5/min on the two bootstrap endpoints, 1/sec on the six network endpoints).
Unexpected server-side failure; details captured in broker logs.
POST /public_api/v1/network/ssl_certificate HTTP/1.1
Host: broker.example.local
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 142
{
"ssl_key": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0t...",
"ssl_cert": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...",
"ssl_key_name": "custom-broker-2026"
}{
"reply": null
}Install a custom trusted-CA bundle on the broker so it trusts certificates issued by an internal / private CA when reaching out to upstream HTTPS services (proxies, SAML IdPs, syslog secure_TCP targets, etc.).
file is a base64-encoded PEM CA bundle, capped at MAX_BASE64_CA_BYTES (~1.4 MiB encoded).
Returns 500 (not 200) when update-ca-certificates fails on the appliance.
Short-lived (10-minute TTL) opaque API token issued by
generateToken. Sent as
Authorization: Bearer <token>. A token that expires mid-request
does NOT abort the response (DRF authenticates once at request
start).
Body for setTrustedCa. The file is a base64-encoded PEM CA bundle, capped at ~1.4 MiB encoded.
Base64-encoded PEM CA bundle (capped at ~1.4 MiB encoded).
Operation succeeded; response carries the empty envelope.
Canonical envelope for every successful (2xx) JSON response.
Wraps the per-endpoint payload (or null when the operation
carries no body content).
Endpoint-specific payload. Schema varies; see each
operation's 200.content.schema.
Request body failed Pydantic validation, or a semantic validation check (CIDR shape, PEM well-formedness, ...) failed in the handler.
Missing, malformed, or expired Bearer token.
InitialPasswordGateMiddleware blocked the request because the
factory-default admin password has not yet been replaced via
resetInitialPassword.
Caller exceeded the per-IP rate limit on this endpoint (5/min on the two bootstrap endpoints, 1/sec on the six network endpoints).
Unexpected server-side failure; details captured in broker logs.
POST /public_api/v1/network/trusted_ca HTTP/1.1
Host: broker.example.local
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 50
{
"file": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t..."
}{
"reply": null
}Last updated
Was this helpful?
