Endurance

Node

An appliance in the cluster, its role, and the state it is in.

Conntrack

GET /{applianceId}/system/conntrack

Get the appliance’s connection tracking settings: the table size, and how long the kernel keeps an idle flow per connection state. The timeouts are appliance-wide — they govern every flow on the box, not only balanced traffic — and are shared by every Cluster Node. The size is this node’s own.

Path parameters
applianceId string Required
curl
curl -X GET "https://appliance.example.com/api/v1/{applianceId}/system/conntrack" \
  -H "Authorization: Bearer $TOKEN"
PHP
<?php

$url = 'https://appliance.example.com/api/v1/{applianceId}/system/conntrack';
$headers = [
    'Authorization: Bearer ' . $token,
];

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'GET',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);
Python
import requests

headers = {"Authorization": f"Bearer {token}"}

response = requests.get("https://appliance.example.com/api/v1/{applianceId}/system/conntrack", headers=headers)
response.raise_for_status()
print(response.json())
JavaScript
const response = await fetch('https://appliance.example.com/api/v1/{applianceId}/system/conntrack', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${token}`,
  },
});

const data = await response.json();
Response
{
  "status": "success",
  "message": "Connection tracking settings",
  "data": {
    "size": 10000,
    "tcpTimeout": "900",
    "tcpFinTimeout": "120",
    "udpTimeout": "300"
  }
}

PUT /{applianceId}/system/conntrack

Update the appliance’s connection tracking settings. A timeout may be given as a whole number of seconds or with a single unit — s, m, h, d, w — such as 900, 15m or 2h. Sub-second units are refused, and so are combinations such as 1h30m: give one unit at a time. What you send is what is stored and returned: 15m comes back as 15m, not as 900. Only size is required, so a timeout you omit keeps its current value. The TCP timeout interacts with Layer 4 persistence. On Source NAT and Destination NAT services a connection can outlive its persistence and keep working on its connection tracking entry alone; if it then idles past this timeout, the next packet is balanced afresh and may reach a different real server. The kernel’s own default is 432000 (5 days), so shortening it narrows that window — the mitigation is a longer persistence. Direct Routing services are unaffected.

This change is staged. Send PUT /services/apply to apply it.

Path parameters
applianceId string Required

.Body parameters

size integer Required

Connection tracking table size. This node only.

tcpTimeout string default: "900"

How long an established TCP connection may idle. 1s–31d. Shared by every Cluster Node.

tcpFinTimeout string default: "120"

How long a connection lingers after entering FIN-WAIT. 1s–31d. Shared by every Cluster Node.

udpTimeout string default: "300"

How long an idle UDP flow is kept, whether or not it has gone bidirectional. 1s–31d. Shared by every Cluster Node.

curl
curl -X PUT "https://appliance.example.com/api/v1/{applianceId}/system/conntrack" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "size": 0,
  "tcpTimeout": "900",
  "tcpFinTimeout": "120",
  "udpTimeout": "300"
}'
PHP
<?php

$url = 'https://appliance.example.com/api/v1/{applianceId}/system/conntrack';
$headers = [
    'Authorization: Bearer ' . $token,
    'Content-Type: application/json',
];

$payload = [
    'size' => 0,
    'tcpTimeout' => '900',
    'tcpFinTimeout' => '120',
    'udpTimeout' => '300',
];

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'PUT',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POSTFIELDS => json_encode($payload),
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);
Python
import requests

headers = {"Authorization": f"Bearer {token}"}
payload = {
    "size": 0,
    "tcpTimeout": "900",
    "tcpFinTimeout": "120",
    "udpTimeout": "300"
}

response = requests.put("https://appliance.example.com/api/v1/{applianceId}/system/conntrack", headers=headers, json=payload)
response.raise_for_status()
print(response.json())
JavaScript
const response = await fetch('https://appliance.example.com/api/v1/{applianceId}/system/conntrack', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${token}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
  "size": 0,
  "tcpTimeout": "900",
  "tcpFinTimeout": "120",
  "udpTimeout": "300"
}),
});

const data = await response.json();
Response
{
  "status": "success",
  "message": "Set connection tracking settings",
  "data": {
    "size": 10000,
    "tcpTimeout": "15m",
    "tcpFinTimeout": "120",
    "udpTimeout": "300"
  }
}

Proxy

GET /{applianceId}/system/proxy

Get Proxy

Path parameters
applianceId string Required
curl
curl -X GET "https://appliance.example.com/api/v1/{applianceId}/system/proxy" \
  -H "Authorization: Bearer $TOKEN"
PHP
<?php

$url = 'https://appliance.example.com/api/v1/{applianceId}/system/proxy';
$headers = [
    'Authorization: Bearer ' . $token,
];

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'GET',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);
Python
import requests

headers = {"Authorization": f"Bearer {token}"}

response = requests.get("https://appliance.example.com/api/v1/{applianceId}/system/proxy", headers=headers)
response.raise_for_status()
print(response.json())
JavaScript
const response = await fetch('https://appliance.example.com/api/v1/{applianceId}/system/proxy', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${token}`,
  },
});

const data = await response.json();
Response
{
  "status": "success",
  "message": "HTTP Proxy host",
  "data": {
    "enable": true,
    "address": {
      "value": null,
      "port": null
    },
    "username": "",
    "password": ""
  }
}

PUT /{applianceId}/system/proxy

Update proxy

This change is staged. Send PUT /services/apply to apply it.

Path parameters
applianceId string Required

.Body parameters

enable boolean Required
address object
username string
password string
curl
curl -X PUT "https://appliance.example.com/api/v1/{applianceId}/system/proxy" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "enable": true,
  "address": {},
  "username": "<username>",
  "password": "<password>"
}'
PHP
<?php

$url = 'https://appliance.example.com/api/v1/{applianceId}/system/proxy';
$headers = [
    'Authorization: Bearer ' . $token,
    'Content-Type: application/json',
];

$payload = [
    'enable' => true,
    'address' => [],
    'username' => '<username>',
    'password' => '<password>',
];

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'PUT',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POSTFIELDS => json_encode($payload),
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);
Python
import requests

headers = {"Authorization": f"Bearer {token}"}
payload = {
    "enable": true,
    "address": {},
    "username": "<username>",
    "password": "<password>"
}

response = requests.put("https://appliance.example.com/api/v1/{applianceId}/system/proxy", headers=headers, json=payload)
response.raise_for_status()
print(response.json())
JavaScript
const response = await fetch('https://appliance.example.com/api/v1/{applianceId}/system/proxy', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${token}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
  "enable": true,
  "address": {},
  "username": "<username>",
  "password": "<password>"
}),
});

const data = await response.json();
Response
{
  "status": "success",
  "message": "Set HTTP Proxy"
}

User interface

GET /{applianceId}/system/userinterface

Get the User Interface settings

Path parameters
applianceId string Required
curl
curl -X GET "https://appliance.example.com/api/v1/{applianceId}/system/userinterface" \
  -H "Authorization: Bearer $TOKEN"
PHP
<?php

$url = 'https://appliance.example.com/api/v1/{applianceId}/system/userinterface';
$headers = [
    'Authorization: Bearer ' . $token,
];

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'GET',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);
Python
import requests

headers = {"Authorization": f"Bearer {token}"}

response = requests.get("https://appliance.example.com/api/v1/{applianceId}/system/userinterface", headers=headers)
response.raise_for_status()
print(response.json())
JavaScript
const response = await fetch('https://appliance.example.com/api/v1/{applianceId}/system/userinterface', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${token}`,
  },
});

const data = await response.json();
Response
{
  "status": "success",
  "message": "User Interface details",
  "data": {
    "apiPort": 9443,
    "ip": "192.168.115.21",
    "SSLCertificate": "5e1db550eb565",
    "sshPort": 22,
    "sshEnabled": true
  }
}

PUT /{applianceId}/system/userinterface

Update the User Interface settings

This change is staged. Send PUT /services/apply to apply it.

Path parameters
applianceId string Required

.Body parameters

ip string Required
apiPort integer Required
SSLCertificate string Required
sshEnabled boolean Required
sshPort string Required
curl
curl -X PUT "https://appliance.example.com/api/v1/{applianceId}/system/userinterface" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "ip": "<ip>",
  "apiPort": 0,
  "SSLCertificate": "<SSLCertificate>",
  "sshEnabled": true,
  "sshPort": "<sshPort>"
}'
PHP
<?php

$url = 'https://appliance.example.com/api/v1/{applianceId}/system/userinterface';
$headers = [
    'Authorization: Bearer ' . $token,
    'Content-Type: application/json',
];

$payload = [
    'ip' => '<ip>',
    'apiPort' => 0,
    'SSLCertificate' => '<SSLCertificate>',
    'sshEnabled' => true,
    'sshPort' => '<sshPort>',
];

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'PUT',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POSTFIELDS => json_encode($payload),
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);
Python
import requests

headers = {"Authorization": f"Bearer {token}"}
payload = {
    "ip": "<ip>",
    "apiPort": 0,
    "SSLCertificate": "<SSLCertificate>",
    "sshEnabled": true,
    "sshPort": "<sshPort>"
}

response = requests.put("https://appliance.example.com/api/v1/{applianceId}/system/userinterface", headers=headers, json=payload)
response.raise_for_status()
print(response.json())
JavaScript
const response = await fetch('https://appliance.example.com/api/v1/{applianceId}/system/userinterface', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${token}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
  "ip": "<ip>",
  "apiPort": 0,
  "SSLCertificate": "<SSLCertificate>",
  "sshEnabled": true,
  "sshPort": "<sshPort>"
}),
});

const data = await response.json();
Response
{
  "status": "success",
  "message": "Set User Interface",
  "data": {
    "apiPort": 9443,
    "ip": "192.168.115.21",
    "SSLCertificate": "5e1db550eb565",
    "sshPort": 22,
    "sshEnabled": true
  }
}