Dynway API
Dynway is WAYSCloud Dynamic DNS for networks where the public IPv4 or IPv6 address can change.
Use it to give a home router, office network, lab server, camera gateway, VPN endpoint, or small self-hosted service a stable hostname such as home.dynway.eu. The router updates the hostname through the standard DynDNS2 protocol, while the WAYSCloud API is used to create the name and manage the router credentials. IPv4 updates maintain the A record; IPv6 updates maintain the AAAA record.
The control API below manages customer-owned Dynway names and router tokens. The router update endpoint is documented here as /nic/update, but it is served from https://dynupdate.wayscloud.services.
Endpoints
| Method | Path | Description |
|---|---|---|
GET | /v1/dyn/names | List Dynway names |
POST | /v1/dyn/names | Create Dynway name |
GET | /v1/dyn/names/{name} | Get Dynway name |
DELETE | /v1/dyn/names/{name} | Delete Dynway name |
GET | /v1/dyn/names/{name}/tokens | List router tokens |
POST | /v1/dyn/names/{name}/tokens | Create router token |
POST | /v1/dyn/names/{name}/tokens/rotate | Rotate router token |
DELETE | /v1/dyn/names/{name}/tokens/{token_id} | Revoke router token |
GET | /nic/update | DynDNS2 router update |
GET /v1/dyn/names
List Dynway names
List the customer-owned Dynway hostnames that can be updated by routers or small servers. Each name is a stable *.dynway.eu hostname with current IPv4/IPv6 state, update timestamps, and active router token metadata. Requires dyn:read scope; dyn:write implies read.
Response:
| Field | Type | Description |
|---|---|---|
names | array | |
quota | integer | |
used | integer |
Example:
curl https://api.wayscloud.services/v1/dyn/names \
-H "X-API-Key: YOUR_API_KEY"POST /v1/dyn/names
Create Dynway name
Create one customer-owned hostname under dynway.eu. In v1 each customer can have one live name. Requires dyn:write scope.
Request Body:
| Field | Type | Description |
|---|---|---|
name | string | Required. Single dynway.eu label, for example home for home.dynway.eu. |
Example:
{
"name": "home"
}Response:
| Field | Type | Description |
|---|---|---|
id | string | |
name | string | |
fqdn | string | |
current_ip | string | Legacy IPv4 address field. Use current_ipv4/current_ipv6 for dual-stack state. |
current_ipv4 | string | Current public IPv4 address used for the A record. |
current_ipv6 | string | Current public IPv6 address used for the AAAA record. |
last_update_at | string | |
last_seen_at | string | |
seen_count | integer | |
dns_removal_pending | boolean | |
created_at | string | |
active_token_count | integer | |
active_token_ids | array |
Example:
curl -X POST https://api.wayscloud.services/v1/dyn/names \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{...}'GET /v1/dyn/names/
Get Dynway name
Get current state for one dynamic DNS name, including current IP, last update timestamps, and active router token IDs.
Response:
| Field | Type | Description |
|---|---|---|
id | string | |
name | string | |
fqdn | string | |
current_ip | string | Legacy IPv4 address field. Use current_ipv4/current_ipv6 for dual-stack state. |
current_ipv4 | string | Current public IPv4 address used for the A record. |
current_ipv6 | string | Current public IPv6 address used for the AAAA record. |
last_update_at | string | |
last_seen_at | string | |
seen_count | integer | |
dns_removal_pending | boolean | |
created_at | string | |
active_token_count | integer | |
active_token_ids | array |
Example:
curl https://api.wayscloud.services/v1/dyn/names/{name} \
-H "X-API-Key: YOUR_API_KEY"DELETE /v1/dyn/names/
Delete Dynway name
Soft-delete a Dynway name and revoke its active router tokens. External DNS record deletion is handled by the guarded cleanup process, so dns_removal_pending is set to true.
Response:
| Field | Type | Description |
|---|---|---|
name | string | |
fqdn | string | |
deleted | boolean | |
dns_removal_pending | boolean | |
revoked_tokens | integer |
Example:
curl -X DELETE https://api.wayscloud.services/v1/dyn/names/{name} \
-H "X-API-Key: YOUR_API_KEY"GET /v1/dyn/names/{name}/tokens
List router tokens
List router token metadata for a Dynway name. Token passwords are never returned after creation.
Response:
| Field | Type | Description |
|---|---|---|
tokens | array |
Example:
curl https://api.wayscloud.services/v1/dyn/names/{name}/tokens \
-H "X-API-Key: YOUR_API_KEY"POST /v1/dyn/names/{name}/tokens
Create router token
Issue the first active router token for a Dynway name. The router password is returned once and cannot be retrieved later.
Request Body:
| Field | Type | Description |
|---|---|---|
description | string |
Example:
{
"description": "home-router"
}Response:
| Field | Type | Description |
|---|---|---|
dyn_name_id | string | |
name | string | |
fqdn | string | |
token_id | string | |
username | string | Same value as token_id; use as DynDNS Basic Auth username. |
password | string | Router password returned once at token creation or rotation. |
created_at | string | |
warning | string |
Example:
curl -X POST https://api.wayscloud.services/v1/dyn/names/{name}/tokens \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{...}'POST /v1/dyn/names/{name}/tokens/rotate
Rotate router token
Revoke active router tokens for the Dynway name and return one new token. Update the router immediately with the returned username/password.
Request Body:
| Field | Type | Description |
|---|---|---|
description | string |
Example:
{
"description": "home-router"
}Response:
| Field | Type | Description |
|---|---|---|
dyn_name_id | string | |
name | string | |
fqdn | string | |
token_id | string | |
username | string | Same value as token_id; use as DynDNS Basic Auth username. |
password | string | Router password returned once at token creation or rotation. |
created_at | string | |
warning | string |
Example:
curl -X POST https://api.wayscloud.services/v1/dyn/names/{name}/tokens/rotate \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{...}'DELETE /v1/dyn/names/{name}/tokens/
Revoke router token
Revoke one active router token and invalidate the dataplane warm cache.
Response:
| Field | Type | Description |
|---|---|---|
token_id | string | |
revoked | boolean |
Example:
curl -X DELETE https://api.wayscloud.services/v1/dyn/names/{name}/tokens/{token_id} \
-H "X-API-Key: YOUR_API_KEY"GET /nic/update
DynDNS2 router update
Update the A or AAAA record for a Dynway hostname from a router or small server.
This endpoint is served from https://dynupdate.wayscloud.services, not from the main API host. Use HTTP Basic Auth with the Dynway token ID as username and the router password as password.
Dynway accepts public IPv4 and IPv6 addresses. IPv4 updates maintain the A record; IPv6 updates maintain the AAAA record. Dynway follows DynDNS2 response semantics: protocol success and protocol errors are returned as HTTP 200, and the response body contains values such as good <ip>, nochg <ip>, badauth, nohost, notfqdn, badagent, abuse, or 911.
Example:
curl https://api.wayscloud.services/nic/update \
-H "X-API-Key: YOUR_API_KEY"