FastDDNS クライアントAPI

IPアドレスが変わるたびに、動的DNSのhostnameを自動更新します。

概要

FastDDNSクライアントAPIを使用すると、router、IPカメラ、スクリプト、専用のアップデーターソフトウェアなど、HTTPに対応したデバイスでDNSのhostnameを現在のIPアドレスに向け続けることができます。 APIはシンプルなGETリクエスト方式に従います。クライアントが認証情報とhostnameを送信すると、サーバーは結果を示す短いステータスコードを返します。

サーバーは、受信した接続からクライアントのパブリックIPアドレスを自動的に検出します。IPを指定するための追加パラメータは必要ありません。

ℹ️ HTTPHTTPSに対応しています。通信中の認証情報を保護するため、HTTPSの使用を強く推奨します。

認証

APIは2つの認証方法をサポートしています。どちらも同じように受け入れられます。デバイスやルーターで設定しやすい方を選んでください。

🔑 ホスト名ごとの認証情報: FastDDNSで作成する各hostnameには、それぞれ専用のuser_nameユーザー名とuser_passパスワードが発行されます。これらの認証情報はただ更新でき、FastDDNS管理ダッシュボードへのログインには使用できません。この設計により、デバイスの認証情報が侵害された場合の影響を抑えられます。

方法1 — HTTP基本認証(URL埋め込み)

認証情報は標準のuser:password@host形式でURLに埋め込まれます。これはrouter、カメラ、HTTPクライアントライブラリで広くサポートされています。ダッシュボードのUpdater Client Keyをパスワードとして使ってください。

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

フィールド 概要 場所
{user_name} ユーザー名は作成時にこの特定のホスト名に割り当てられました。 FastDDNS ダッシュボード →ホスト名 →詳細
{user_pass} この特定のホスト名に作成時に割り当てられたパスワードです。 FastDDNS ダッシュボード →ホスト名 →詳細
{hostname} 更新すべき完全限定ホスト名、例えばtesthost.fastddns.org FastDDNS ダッシュボード →ホスト名 →詳細

方法2 — クエリ文字列パラメータ

認証情報はhostname認証情報はプレーンなクエリパラメータとして渡されます。これは、HTTP Basic Authヘッダーを設定できないものの、完全にカスタムしたURL文字列を指定できるデバイスやfirmwareに便利です。

https://client.fastddns.net/?hostname={hostname}&user_name={user_name}&user_pass={user_pass}
パラメータ 種類 概要
{user_name}

string このホスト名は作成時に割り当てられたユーザー名です。
{user_pass} string このホスト名が作成された際に割り当てられたパスワードです。
{hostname} string 更新すべき完全限定ホスト名、例:testhost.fastddns.org

クエリ文字列認証の使用例:

https://client.fastddns.net/?hostname=testhost.fastddns.org&user_name=YOUR_UPDATE_USERNAME&user_pass=YOUR_UPDATE_PASSWORD
⚠️ クエリ文字列認証を使用する場合は、認証情報が平文で送信されないよう、常にHTTPSを優先してください。 HTTPでも利用できますが、信頼できるローカルネットワーク上またはテスト時にのみ使用してください。

更新を実行

アカウントに登録されているhostnameのIPアドレスを更新するためのGETリクエストを1回送信します。各リクエストは一度に1つのホスト名を更新します

エンドポイント

GET https://client.fastddns.net/
通常のHTTPでもアクセスできます — httpshttpをHTTPに置き換えてください。

URL形式 — 方法1: HTTP基本認証

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

URL形式 — 方法2: クエリ文字列

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

クエリパラメータ

パラメータ 種類 概要
hostname 必須 string 更新する完全限定ホスト名(FQDN)、例:myhome.fastddns.net または testhost.fastddns.org。リクエストごとにホスト名は1つのみ対応されています。
user_name 方法2 string このhostnameのユーザー名です。クエリ文字列認証(方法2)を使用する場合に必要です。HTTP Basic Auth(方法1)を使用する場合は不要です。
user_pass 方法2 string このhostnameのパスワードです。クエリ文字列認証(方法2)を使用する場合に必要です。HTTP Basic Auth(方法1)を使用する場合は不要です。
IPの自動検出:サーバーは、受信したTCP接続の送信元IPを使用してパブリックIPアドレスを特定します。myipパラメータを指定する必要はありません。

リクエスト例

方法1 — HTTPS経由のHTTP Basic Auth:

https://YOUR_UPDATE_USERNAME:YOUR_UPDATE_PASSWORD@client.fastddns.net/?hostname=testhost.fastddns.org

方法2 — HTTPS経由のクエリ文字列:

https://client.fastddns.net/?hostname=testhost.fastddns.org&user_name=YOUR_UPDATE_USERNAME&user_pass=YOUR_UPDATE_PASSWORD

プレーンHTTPを使用する場合(テストまたは信頼できるネットワークのみ):

http://YOUR_UPDATE_USERNAME:YOUR_UPDATE_PASSWORD@client.fastddns.net/?hostname=testhost.fastddns.org

戻りコード

すべての更新応答はHTTPステータス 200 OK を返し、本文はプレーンテキストです。 クライアントはこのテキスト本文を解析して、更新の実際の結果を判断する必要があります。

good {ip}

更新成功

hostnameレコードが検出されたIPアドレスに更新されました。実際のIPアドレスは応答に含まれます。例: good 203.0.113.45。これはIPアドレスが変更された場合に返される期待される応答です。

nochg {ip}

変更不要

hostnameはすでに検出されたIPアドレスを指しているため、更新は不要でした。現在のIPアドレスが含まれます。例: nochg 203.0.113.45。これは正常な、エラーではない応答です。

badauth

認証失敗

ユーザー名またはアップデートクライアントキーが正しくないか、取り消されています。FastDDNSダッシュボードで認証情報を確認してください。自動的に再試行せず、まず認証情報を修正してください。

nohost

ホスト名が見つかりません

指定されたhostnameはアカウントに存在しないか、動的更新の対象外です。hostnameのスペルを確認し、アカウントに登録されていることを確認してください。

911

サーバーエラー

FastDDNSサーバー側で内部エラーが発生しました。再試行する前に少なくとも5分待ってください。問題が続く場合は、FastDDNSのステータスページを確認するか、サポートに連絡してください。

応答概要

応答テキスト HTTPステータス 意味 必要な対応
good {ip} 200 IPアドレスの更新に成功 なし — 更新完了
nochg {ip} 200 IPアドレスに変更なし、更新なし なし — すでに最新の状態
badauth 200 無効な認証情報 ユーザー名 / クライアントキーを確認してください
nohost 200 ホスト名は登録されていません ダッシュボードでホスト名を検証してください
911 200 サーバー側のエラー 5分以上待ってから再試行してください
⚠️ 自動化では重要です: 常にレスポンス本文のテキストを解析してください。HTTPステータスコードだけではありません。APIは常に200を返します — テキスト本文で更新が実際に成功したかどうかを確認できます。

クライアントIPを取得

FastDDNSは、サーバーから見たパブリックIPアドレスを返すシンプルなユーティリティエンドポイントを提供します。 デバッグ、デバイスがどのIPから送信しているかの確認、または更新エンドポイントを呼び出す前にカスタムスクリプトで使用する場合に便利です。

エンドポイント

GET https://client.fastddns.net/dyndns/getip
認証は不要です。通常のHTTPでもアクセスできます。

レスポンス

HTTP 200 OK とともに、検出されたパブリックIPアドレスをレスポンス本文にプレーンテキストで返します。

# Example response body
203.0.113.45RESPONSE

リクエスト例

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

curlを使用:

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

コード例

シェル / cURL

# Recommended: let curl build the Authorization header (-u), so the
# credentials never appear in the URL.
HOSTNAME="myhome.fastddns.org"
USER_NAME="YOUR_UPDATE_USERNAME"
USER_PASS="YOUR_UPDATE_PASSWORD"
curl -s -u "${USER_NAME}:${USER_PASS}" "https://client.fastddns.net/?hostname=${HOSTNAME}"
# Legacy form, for devices that can only be given one URL field:
curl -s "https://client.fastddns.net/?hostname=${HOSTNAME}&user_name=${USER_NAME}&user_pass=${USER_PASS}"
# Check what IP the server sees from your device
curl -s "https://client.fastddns.net/dyndns/getip"SHELL

パイソン

import requests
HOSTNAME  = "testhost.fastddns.org"
USER_NAME = "YOUR_UPDATE_USERNAME"
USER_PASS = "YOUR_UPDATE_PASSWORD"
# 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 = 'YOUR_UPDATE_USERNAME';
$user_pass = 'YOUR_UPDATE_PASSWORD';
// Recommended: Basic Auth in a request header, so the password is not
// part of the URL and cannot leak through logs or error messages.
$url = "https://client.fastddns.net/?hostname=" . urlencode($hostname);
$auth = 'Basic ' . base64_encode($user_name . ':' . $user_pass);
// 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,
    'header'  => "Authorization: {$auth}\r\n",
]]);
$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スクリプト)

#!/bin/bash
HOSTNAME="testhost.fastddns.org"
USER_NAME="YOUR_UPDATE_USERNAME"
USER_PASS="YOUR_UPDATE_PASSWORD"
# Method 1: HTTP Basic Auth
RESULT=$(curl -s -u "${USER_NAME}:${USER_PASS}" "https://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

トラブルシューティング

次のエラーを受け取ります:badauthを受け取っています。

提供されたuser_nameまたはuser_passは、そのhostnameに割り当てられた認証情報と一致しません。 各hostnameにはそれぞれ独立した認証情報があります。ダッシュボードのホスト名→詳細で確認してください。 これらの認証情報はそのhostname専用であり、FastDDNS管理ポータルへのログインには使用できません。 最近認証情報をリセットした場合は、そのhostnameを使用しているすべてのデバイスの設定を更新してください。

次のエラーを受け取ります:nohost

hostnameパラメータに指定したhostnameが存在しないか、提供された認証情報に対応するアカウントに属していません。 hostnameの入力ミスがないか、ダッシュボードにそのhostnameが登録されているか、user_nameuser_passが一致しているか確認してくださいその特定のホスト名が正しいか確認してください。

サーバーが誤ったIPを検出しています

サーバーはTCP接続の送信元IPを使用します。デバイスがNAT routerの背後にある場合は、routerのパブリックIPが検出されます。これは通常、意図した動作です。VPNまたはプロキシを使用している場合、サーバーにはVPNまたはプロキシの出口IPが表示されます。 getip endpointを使って、サーバーがあなたのデバイスからどのIPを認識しているか確認してください。

次のエラーを受け取ります:911を受け取っています。

これは一時的なサーバー側の問題を示します。再試行する前に少なくとも5分待ってください。リクエストを短時間に繰り返し送信しないでください。rate limitingが発生する可能性があります。FastDDNSのステータスページで進行中のインシデントを確認してください。

アップデートエンドポイントはどのくらいの頻度でポーリングすべきでしょうか?

IPの変更は5分です。IPが変わっていない場合、サーバーはnochgを返しますが、これは軽量なノーオペレーションです。1分に1回以上の投票は推奨されず、速度制限につながる可能性があります。