FastDDNS Client API

Automatically update your dynamic DNS hostname whenever your IP address changes.

Overview

The FastDDNS Client API allows any HTTP-capable device — routers, IP cameras, scripts, or dedicated updater software — to keep your DNS hostname pointed at your current IP address. The API follows a simple GET-request design: your client sends credentials and a hostname, and the server responds with a short status code indicating the result.

The server automatically detects the client's public IP address from the incoming connection. No extra parameters are needed to specify your IP.

ℹ️ Both HTTP and HTTPS are supported. HTTPS is strongly recommended to protect your credentials in transit.

Authentication

The API supports two authentication methods. Both are accepted equally — choose whichever is easier to configure on your device or router.

🔑 Per-hostname credentials: Each hostname you create on FastDDNS is issued its own dedicated user_name and user_pass. These credentials can only update that specific hostname and cannot be used to log in to the FastDDNS management dashboard. This design limits the impact if a device's credentials are ever compromised.

Method 1 — HTTP Basic Auth (URL-embedded)

Credentials are embedded in the URL using the standard user:password@host format. This is widely supported by routers, cameras, and HTTP client libraries. Use the Updater Client Key from your dashboard as the password.

https://{user_name}:{user_pass}@client.fastddns.net/?hostname={hostname}

FieldDescriptionWhere to find it
{user_name} The username assigned to this specific hostname at creation time. FastDDNS Dashboard → Hostnames → Details
{user_pass} The password assigned to this specific hostname at creation time. FastDDNS Dashboard → Hostnames → Details
{hostname} The fully qualified hostname to update, e.g.. testhost.fastddns.org. FastDDNS Dashboard → Hostnames → Details

Method 2 — Query String Parameters

Credentials are passed as plain query parameters alongside hostname. This is useful for devices and firmware that cannot configure HTTP Basic Auth headers but allow a fully custom URL string.

https://client.fastddns.net/?hostname={hostname}&user_name={user_name}&user_pass={user_pass}
ParameterTypeDescription
{user_name}
 
string The username assigned to this hostname when it was created.
{user_pass} string The password assigned to this hostname when it was created.
{hostname} string The fully qualified hostname to update, e.g. testhost.fastddns.org.

Example using query string auth:

https://client.fastddns.net/?hostname=testhost.fastddns.org&user_name=fastddnstest&user_pass=569832
⚠️ When using query string auth, always prefer HTTPS so credentials are not transmitted in plain text. HTTP is available but should only be used on trusted local networks or for testing.

Perform Update

Send a single GET request to update the IP address of a hostname registered to your account. Each request updates one hostname at a time.

Endpoint

GEThttps://client.fastddns.net/
Also accessible via plain HTTP — replace https with http.

URL Format — Method 1: HTTP Basic Auth

https://{user_name}:{user_pass}@client.fastddns.net/?hostname={hostname}

URL Format — Method 2: Query String

https://client.fastddns.net/?hostname={hostname}&user_name={user_name}&user_pass={user_pass}

Query Parameters

Parameter Type Description
hostname required string The fully qualified hostname (FQDN) to update, e.g. myhome.fastddns.net or testhost.fastddns.org. Only one hostname per request is supported.
user_name Method 2 string The username for this hostname. Required when using query string authentication (Method 2). Not needed when using HTTP Basic Auth (Method 1).
user_pass Method 2 string The password for this hostname. Required when using query string authentication (Method 2). Not needed when using HTTP Basic Auth (Method 1).
IP auto-detection: The server uses the source IP of the incoming TCP connection to determine your public IP address. You do not need to supply an myip parameter.

Example Requests

Method 1 — HTTP Basic Auth over HTTPS:

https://fastddnstest:569832@client.fastddns.net/?hostname=testhost.fastddns.org

Method 2 — Query string over HTTPS:

https://client.fastddns.net/?hostname=testhost.fastddns.org&user_name=fastddnstest&user_pass=569832

Using plain HTTP (testing / trusted networks only):

http://fastddnstest:569832@client.fastddns.net/?hostname=testhost.fastddns.org

Return Codes

All update responses return HTTP status 200 OK with a plain text body. Your client must parse this text body to determine the actual outcome of the update.

good {ip}

Update Successful

The hostname record has been updated to the detected IP address. The actual IP is included in the response, e.g. good 203.0.113.45. This is the expected response when your IP has changed.

nochg {ip}

No Change Required

The hostname already points to the detected IP address — no update was necessary. The current IP is included, e.g. nochg 203.0.113.45. This is a normal, non-error response.

badauth

Authentication Failed

The username or updater client key is incorrect or has been revoked. Verify your credentials in the FastDDNS dashboard. Do not retry automatically — fix the credentials first.

nohost

Hostname Not Found

The specified hostname does not exist in your account or is not eligible for dynamic updates. Check the hostname spelling and confirm it is registered under your account.

911

Server Error

An internal error occurred on the FastDDNS server side. Wait at least 5 minutes before retrying. If the problem persists, check the FastDDNS status page or contact support.

Response Summary

Response Text HTTP Status Meaning Action Required
good {ip} 200 IP updated successfully None — update complete
nochg {ip} 200 IP unchanged, no update made None — already current
badauth 200 Invalid credentials Check username / client key
nohost 200 Hostname not registered Verify hostname in dashboard
911 200 Server-side error Retry after 5+ minutes
⚠️ Important for automation: Always parse the response body text, not just the HTTP status code. The API always returns 200 — the text body tells you whether the update actually succeeded.

Get Client IP

FastDDNS provides a simple utility endpoint that returns the public IP address as seen by the server. This is useful for debugging, for verifying which IP your device is sending from, or for use in custom scripts before calling the update endpoint.

Endpoint

GEThttps://client.fastddns.net/dyndns/getip
No authentication required. Also accessible via plain HTTP.

Response

Returns HTTP 200 OK with the detected public IP address as plain text in the response body.

# Example response body
203.0.113.45RESPONSE

Example Requests

https://client.fastddns.net/dyndns/getip
http://client.fastddns.net/dyndns/getip

Using curl:

curl https://client.fastddns.net/dyndns/getipSHELL

Code Examples

Shell / cURL

# Method 1: HTTP Basic Auth (HTTPS, IP auto-detected)
curl "https://fastddnstest:[email protected]/?hostname=testhost.fastddns.org"
# Method 2: Query string credentials
curl "https://client.fastddns.net/?hostname=testhost.fastddns.org&user_name=fastddnstest&user_pass=569832"
# Check what IP the server sees from your device
curl "https://client.fastddns.net/dyndns/getip"SHELL

Python

import requests
HOSTNAME  = "testhost.fastddns.org"
USER_NAME = "fastddnstest"
USER_PASS = "569832"
# Method 1: HTTP Basic Auth
resp = requests.get(
    "https://client.fastddns.net/",
    auth=(USER_NAME, USER_PASS),
    params={"hostname": HOSTNAME}
)
# Method 2: Query string
# resp = requests.get("https://client.fastddns.net/", params={
#     "hostname": HOSTNAME, "user_name": USER_NAME, "user_pass": USER_PASS
# })
body = resp.text.strip()
if body.startswith("good"):
    print(f"Updated successfully: {body}")
elif body.startswith("nochg"):
    print(f"No change needed: {body}")
elif body == "badauth":
    print("Authentication failed. Check credentials.")
elif body == "nohost":
    print("Hostname not found.")
elif body == "911":
    print("Server error. Try again later.")PYTHON

PHP

<?php
$hostname  = 'testhost.fastddns.org';
$user_name = 'fastddnstest';
$user_pass = '569832';
// Method 1: HTTP Basic Auth embedded in URL
$url = "https://{$user_name}:{$user_pass}@client.fastddns.net/?hostname=" . urlencode($hostname);
// Method 2: Query string credentials
// $url = "https://client.fastddns.net/?hostname=" . urlencode($hostname)
//      . "&user_name=" . urlencode($user_name)
//      . "&user_pass=" . urlencode($user_pass);
$ctx = stream_context_create(['http' => ['timeout' => 10]]);
$body = trim(file_get_contents($url, false, $ctx));
switch (true) {
    case str_starts_with($body, 'good'):
        echo "Updated: {$body}\n"; break;
    case str_starts_with($body, 'nochg'):
        echo "No change: {$body}\n"; break;
    case $body === 'badauth':
        echo "Auth failed. Check hostname credentials.\n"; break;
    case $body === 'nohost':
        echo "Hostname not found.\n"; break;
    case $body === '911':
        echo "Server error, retry later.\n"; break;
}PHP

Bash (Cron / Router Script)

#!/bin/bash
HOSTNAME="testhost.fastddns.org"
USER_NAME="fastddnstest"
USER_PASS="569832"
# Method 1: HTTP Basic Auth
RESULT=$(curl -s "https://${USER_NAME}:${USER_PASS}@client.fastddns.net/?hostname=${HOSTNAME}")
# Method 2: Query string (uncomment to use instead)
# RESULT=$(curl -s "https://client.fastddns.net/?hostname=${HOSTNAME}&user_name=${USER_NAME}&user_pass=${USER_PASS}")
case "$RESULT" in
  good*)   echo "[OK] $RESULT" ;;
  nochg*)  echo "[OK] $RESULT" ;;
  badauth) echo "[ERR] Bad credentials — check hostname user/pass"; exit 1 ;;
  nohost)  echo "[ERR] Hostname not found"; exit 1 ;;
  911)     echo "[ERR] Server error, retry later"; exit 1 ;;
  *)       echo "[WARN] Unknown response: $RESULT" ;;
esacBASH

Troubleshooting

I receive badauth

The user_name or user_pass supplied do not match the credentials assigned to that hostname. Each hostname has its own independent credentials — find them in your dashboard under Hostnames → Details. Note that these credentials are specific to the hostname and cannot be used to log in to the FastDDNS management portal. If you recently reset the credentials, update all devices using that hostname.

I receive nohost

The hostname in the hostname parameter does not exist or does not belong to the account identified by the supplied credentials. Check for typos in the hostname, confirm it is listed in your dashboard, and verify that the user_name and user_pass match that specific hostname.

The server is detecting the wrong IP

The server uses the source IP of the TCP connection. If your device is behind a NAT router, the router's public IP will be detected — which is usually the desired behavior. If you are on a VPN or proxy, the server will see the VPN/proxy exit IP instead. Use the getip endpoint to verify which IP the server sees from your device.

I receive 911

This indicates a temporary server-side problem. Wait at least 5 minutes before retrying. Do not loop requests rapidly — this may trigger rate limiting. Check the FastDDNS status page for any active incidents.

How often should I poll the update endpoint?

We recommend checking for IP changes every 5 minutes. When your IP has not changed, the server returns nochg, which is a lightweight no-op. Polling more frequently than once per minute is discouraged and may result in rate limiting.