hosting について
hostingは、共有ホスティングのリソースを管理するHostinger Hosting APIの資料です。サイト運用を自動化する開発者向けに、サイト作成、データベース、ドメイン、Node.jsのデプロイ、WordPressの導入を扱います。
主な機能
- 01サイトと注文の作成・一覧表示
- 02データセンター選択とドメイン確認
- 03無料サブドメインの生成
- 04データベースとドメインの管理
- 05アーカイブからNode.jsアプリをビルド
- 06WordPressの導入と状態確認
活用シーン
- 01ホスティングサイトの作成
- 02データベースとサイトドメインの管理
- 03Node.jsプロジェクトのアーカイブをデプロイ
- 04既存サイトへのWordPress導入
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ hostinger/ hostinger-agent-skills --skill hostingインストール後、Claude Code で/hostingを入力して読み込まれたか確認します。
詳細
Hostinger ホスティング
ホスティング API は、共有ホスティングサービスを管理します。ウェブサイトの作成、注文の一覧表示、データセンターの選択、ドメイン所有権の確認、無料サブドメインの生成、データベース、サブドメイン、パークドメインの管理、Node.js アプリケーションのデプロイ、WordPress のインストールを行えます。
目次
基本概念
ウェブサイト
ウェブサイトは、ホスティングの中核となるリソースです。各ウェブサイトはドメインとホスティング注文に関連付けられます。ウェブサイトの種類には、メインウェブサイトとアドオンウェブサイトがあります。そのプランで最初のウェブサイトを作成すると、ホスティングアカウントのプロビジョニングが開始されます。
注文
ホスティング注文は、購入済みのホスティングプランを表します。注文はステータスや ID で絞り込めます。共有アクセスに対応しており、アクセス権を付与された他のアカウントの注文も表示できます。
データセンター
新しいホスティングプランで最初のウェブサイトを作成するときは、データセンターを選択する必要があります。データセンター一覧の先頭の項目が、注文要件に最も適した候補です。以降のウェブサイトでは、同じデータセンターが自動的に使用されます。
ドメインの確認
ドメインをホスティングに使用する前に、所有権を確認する必要があります。Hostinger の無料サブドメイン(*.hostingersite.com)は確認を省略できます。それ以外のドメインでは、指定された TXT レコードを DNS に追加して確認してください。反映には最大 10 分かかる場合があります。
無料サブドメイン
Hostinger では、カスタムドメインを購入せずにすぐ使用できる、*.hostingersite.com 配下の無料サブドメインを提供しています。
ホスティングアカウント(username)
上記の注文/ウェブサイトのモデルとは別に、多くのホスティング操作は ホスティングアカウント の範囲内で実行されます。アカウントは username で識別されます。ユーザー名はウェブサイト一覧(GET /api/hosting/v1/websites)で返され、データベース、サブドメイン、パークドメイン、Node.js ビルド、アカウントごとの WordPress インストールを管理する際のパスのルートになります(/api/hosting/v1/accounts/{username}/...)。データベース名とユーザー名には、このユーザー名が自動的にプレフィックスとして付加されます。
データベース
各ホスティングアカウントには、個別のデータベースユーザーとパスワードを持つ MySQL データベースを複数作成できます。データベースはウェブサイトのドメインに割り当てられます。データベースの作成と削除、データベースユーザーのパスワード変更、破損したテーブルの修復、ビジュアル管理用のシングルサインオン phpMyAdmin リンクの取得が可能です。
サブドメインとパークドメイン
- サブドメイン — 既存のウェブサイト配下に追加するホスト名(例:
blog.example.com)です。それぞれに独自のドキュメントルートがあります。 - パークドメイン(エイリアスドメイン)— 親ウェブサイトと 同じ コンテンツを提供する追加ドメインです。
どちらも特定のウェブサイトの配下で管理します:/api/hosting/v1/accounts/{username}/websites/{domain}/...。
Node.js アプリケーション
Node.js 対応プランのウェブサイトでは、ビルドパイプラインが実行されます。推奨される手順では、プロジェクトのアーカイブをアップロードし、その package.json からビルド設定を自動検出して、1 ステップでビルドを開始します。各ビルドには uuid と状態(pending、running、completed、failed)があります。実行中に出力をストリーミングするには、ビルドログを from_line を使ってポーリングしてください。
WordPress
既存のウェブサイトに WordPress をインストールします。ウェブサイトはあらかじめ作成されている必要があります。まず POST /api/hosting/v1/websites で作成し、一覧に表示されるまでポーリングしてください。インストールは非同期で実行されるため、準備が整ったことを確認するには GET /api/hosting/v1/wordpress/installations をポーリングしてください。
一般的なパターン
ウェブサイトの作成(全手順)
# Step 1: List available datacenters for your order
curl -X GET "https://developers.hostinger.com/api/hosting/v1/datacenters?order_id=12345" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Step 2: Generate a free subdomain (optional, if no custom domain)
curl -X POST "https://developers.hostinger.com/api/hosting/v1/domains/free-subdomains" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Step 3: Verify domain ownership (skip for *.hostingersite.com)
curl -X POST "https://developers.hostinger.com/api/hosting/v1/domains/verify-ownership" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "domain": "example.com" }'
# Step 4: Create the website
curl -X POST "https://developers.hostinger.com/api/hosting/v1/websites" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"domain": "example.com",
"order_id": 12345,
"datacenter_code": "us-east-1"
}'
Python SDK:
from hostinger_api import Hostinger
client = Hostinger(api_token="YOUR_API_TOKEN")
# List datacenters
datacenters = client.hosting.datacenters.list(order_id=12345)
dc_code = datacenters[0].code # Use recommended datacenter
# Create website
client.hosting.websites.create(
domain="example.com",
order_id=12345,
datacenter_code=dc_code
)
TypeScript SDK:
import { Hostinger } from "hostinger-api-sdk";
const client = new Hostinger({ apiToken: "YOUR_API_TOKEN" });
const datacenters = await client.hosting.datacenters.list({ orderId: 12345 });
const dcCode = datacenters[0].code;
await client.hosting.websites.create({
domain: "example.com",
orderId: 12345,
datacenterCode: dcCode,
});
PHP SDK:
use Hostinger\Api\HostingerApi;
$client = new HostingerApi('YOUR_API_TOKEN');
$datacenters = $client->hosting->datacenters->list(['order_id' => 12345]);
$dcCode = $datacenters[0]->code;
$client->hosting->websites->create([
'domain' => 'example.com',
'order_id' => 12345,
'datacenter_code' => $dcCode,
]);
ウェブサイトの一覧表示
# List all websites
curl -X GET "https://developers.hostinger.com/api/hosting/v1/websites" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Filter by order ID
curl -X GET "https://developers.hostinger.com/api/hosting/v1/websites?order_id=12345" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Filter by domain
curl -X GET "https://developers.hostinger.com/api/hosting/v1/websites?domain=example.com" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Paginate results
curl -X GET "https://developers.hostinger.com/api/hosting/v1/websites?page=2&per_page=25" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
ホスティング注文の一覧表示
# List all orders
curl -X GET "https://developers.hostinger.com/api/hosting/v1/orders" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Filter by status
curl -X GET "https://developers.hostinger.com/api/hosting/v1/orders?statuses=active" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
データベースの管理
# List databases for an account (filter by domain / assignment / search)
curl -X GET "https://developers.hostinger.com/api/hosting/v1/accounts/u123456789/databases?domain=example.com&is_assigned=true" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Create a database (name and user are auto-prefixed with the account username)
curl -X POST "https://developers.hostinger.com/api/hosting/v1/accounts/u123456789/databases" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "appdb",
"user": "appuser",
"password": "SecurePass123!",
"website_domain": "example.com"
}'
# Change the database user password (also update it in your site config)
curl -X PATCH "https://developers.hostinger.com/api/hosting/v1/accounts/u123456789/databases/u123456789_appdb/change-password" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "password": "NewSecurePass456!" }'
# Get a single sign-on phpMyAdmin link
curl -X GET "https://developers.hostinger.com/api/hosting/v1/accounts/u123456789/databases/u123456789_appdb/phpmyadmin-link" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Repair corrupted tables (asynchronous)
curl -X PATCH "https://developers.hostinger.com/api/hosting/v1/accounts/u123456789/databases/u123456789_appdb/repair" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Delete a database (use the full name from the list endpoint)
curl -X DELETE "https://developers.hostinger.com/api/hosting/v1/accounts/u123456789/databases/u123456789_appdb" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
Python SDK:
from hostinger_api import Hostinger
client = Hostinger(api_token="YOUR_API_TOKEN")
# Create a database
client.hosting.databases.create(
username="u123456789",
name="appdb",
user="appuser",
password="SecurePass123!",
website_domain="example.com",
)
# List databases
databases = client.hosting.databases.list(username="u123456789")
for db in databases:
print(db.name)
TypeScript SDK:
import { Hostinger } from "hostinger-api-sdk";
const client = new Hostinger({ apiToken: "YOUR_API_TOKEN" });
await client.hosting.databases.create("u123456789", {
name: "appdb",
user: "appuser",
password: "SecurePass123!",
websiteDomain: "example.com",
});
const databases = await client.hosting.databases.list("u123456789");
PHP SDK:
use Hostinger\Api\HostingerApi;
$client = new HostingerApi('YOUR_API_TOKEN');
$client->hosting->databases->create('u123456789', [
'name' => 'appdb',
'user' => 'appuser',
'password' => 'SecurePass123!',
'website_domain' => 'example.com',
]);
$databases = $client->hosting->databases->list('u123456789');
サブドメインとパークドメインの管理
# List subdomains for a website
curl -X GET "https://developers.hostinger.com/api/hosting/v1/accounts/u123456789/websites/example.com/subdomains" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Create a subdomain (optionally with a custom directory)
curl -X POST "https://developers.hostinger.com/api/hosting/v1/accounts/u123456789/websites/example.com/subdomains" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"subdomain": "blog",
"directory": "blog",
"is_using_public_directory": false
}'
# Delete a subdomain
curl -X DELETE "https://developers.hostinger.com/api/hosting/v1/accounts/u123456789/websites/example.com/subdomains/blog" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# List parked (alias) domains
curl -X GET "https://developers.hostinger.com/api/hosting/v1/accounts/u123456789/websites/example.com/parked-domains" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Park a domain so it serves the same content as the parent website
curl -X POST "https://developers.hostinger.com/api/hosting/v1/accounts/u123456789/websites/example.com/parked-domains" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "parked_domain": "example.net" }'
# Remove a parked domain
curl -X DELETE "https://developers.hostinger.com/api/hosting/v1/accounts/u123456789/websites/example.com/parked-domains/example.net" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
Node.js アプリケーションのデプロイ
# Create and start a build from a project archive (settings auto-detected from package.json)
curl -X POST "https://developers.hostinger.com/api/hosting/v1/accounts/u123456789/websites/example.com/nodejs/builds/from-archive" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"archive": "uploads/my-app.zip",
"node_version": 20,
"app_type": "ssr",
"build_script": "build",
"entry_file": "server.js",
"package_manager": "npm"
}'
# List builds (filter by state)
curl -X GET "https://developers.hostinger.com/api/hosting/v1/accounts/u123456789/websites/example.com/nodejs/builds?states[]=running" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
# Stream build logs while running (poll with from_line = previously returned line count)
curl -X GET "https://developers.hostinger.com/api/hosting/v1/accounts/u123456789/websites/example.com/nodejs/builds/3f9a.../logs?from_line=0" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
WordPress のインストール
# Step 1: ensure the website exists (POST /websites, then poll GET /websites)
# Step 2: install WordPress on it
curl -X POST "https://developers.hostinger.com/api/hosting/v1/accounts/u123456789/wordpress/installations" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"domain": "example.com",
"site_title": "My Site",
"language": "en_US",
"directory": "public_html",
"auto_updates": "minor",
"credentials": {
"email": "[email protected]",
"login": "admin",
"password": "SecureAdminPass123!"
}
}'
# Step 3: poll for readiness (installation is asynchronous)
curl -X GET "https://developers.hostinger.com/api/hosting/v1/wordpress/installations?username=u123456789&domain=example.com" \
-H "Authorization: Bearer $HOSTINGER_API_TOKEN"
API リファレンス
データセンター
| メソッド | エンドポイント | 説明 |
|---|---|---|
GET | /api/hosting/v1/datacenters | 利用可能なデータセンターを一覧表示します(order_id クエリパラメーターが必要です) |
ドメイン
| メソッド | エンドポイント | 説明 |
|---|---|---|
POST | /api/hosting/v1/domains/free-subdomains | 無料のサブドメインを生成します |
POST | /api/hosting/v1/domains/verify-ownership | ドメインの所有権を確認します |
注文
| メソッド | エンドポイント | 説明 |
|---|---|---|
GET | /api/hosting/v1/orders | ホスティングの注文を一覧表示します(ページネーション対応、フィルター可能) |
ウェブサイト
| メソッド | エンドポイント | 説明 |
|---|---|---|
GET | /api/hosting/v1/websites | ウェブサイトを一覧表示します(ページネーション対応、フィルター可能) |
POST | /api/hosting/v1/websites | 新しいウェブサイトを作成します |
ウェブサイトのクエリパラメーター
| パラメーター | 説明 |
|---|---|
page | ページ番号 |
per_page | 1ページあたりの項目数 |
username | ユーザー名でフィルターします |
order_id | 注文 ID でフィルターします |
is_enabled | 有効状態でフィルターします |
domain | ドメイン名でフィルターします |
データベース
| メソッド | エンドポイント | 説明 |
|---|---|---|
GET | /api/hosting/v1/accounts/{username}/databases | アカウントのデータベースを一覧表示します(フィルター:page、per_page、domain、is_assigned、search) |
POST | /api/hosting/v1/accounts/{username}/databases | ユーザーとパスワードを指定してデータベースを作成します |
DELETE | /api/hosting/v1/accounts/{username}/databases/{name} | データベースを削除します(フルネームを使用してください) |
PATCH | /api/hosting/v1/accounts/{username}/databases/{name}/change-password | データベースユーザーのパスワードを変更します |
GET | /api/hosting/v1/accounts/{username}/databases/{name}/phpmyadmin-link | phpMyAdmin のシングルサインオンリンクを取得します |
PATCH | /api/hosting/v1/accounts/{username}/databases/{name}/repair | 破損したテーブルを修復します(非同期) |
サブドメイン
| メソッド | エンドポイント | 説明 |
|---|---|---|
GET | /api/hosting/v1/accounts/{username}/websites/{domain}/subdomains | ウェブサイトのサブドメインを一覧表示します |
POST | /api/hosting/v1/accounts/{username}/websites/{domain}/subdomains | サブドメインを作成します |
DELETE | /api/hosting/v1/accounts/{username}/websites/{domain}/subdomains/{subdomain} | サブドメインを削除します |
パークドメイン
| メソッド | エンドポイント | 説明 |
|---|---|---|
GET | /api/hosting/v1/accounts/{username}/websites/{domain}/parked-domains | パークドメイン(エイリアスドメイン)を一覧表示します |
POST | /api/hosting/v1/accounts/{username}/websites/{domain}/parked-domains | パークドメインを作成します |
DELETE | /api/hosting/v1/accounts/{username}/websites/{domain}/parked-domains/{parkedDomain} | パークドメインを削除します |
Node.js
| メソッド | エンドポイント | 説明 |
|---|---|---|
GET | /api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds | ビルドを一覧表示します(フィルター:page、per_page、states) |
POST | /api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/from-archive | アーカイブからビルドを作成して開始します |
GET | /api/hosting/v1/accounts/{username}/websites/{domain}/nodejs/builds/{uuid}/logs | ビルドログを取得します(from_line を指定してポーリングします) |
WordPress
| メソッド | エンドポイント | 説明 |
|---|---|---|
POST | /api/hosting/v1/accounts/{username}/wordpress/installations | 既存のウェブサイトに WordPress をインストールします |
GET | /api/hosting/v1/wordpress/installations | WordPress のインストールを一覧表示します(フィルター:username、domain、ownership) |
ベストプラクティス
ウェブサイトの作成
- 地理的な要件がない限り、推奨データセンター(リストの先頭)を必ず選択してください
datacenter_codeが必要なのは、新しいホスティングプランで最初のウェブサイトを作成する場合のみです- ドメイン名の先頭に
www.は指定できません。ドメインのみを使用してください - ウェブサイトの作成には数分かかる場合があります。ステータスを確認するには、一覧エンドポイントをポーリングしてください
ドメインの所有権確認
- Hostinger の無料サブドメイン(
*.hostingersite.com)では、所有権確認をスキップします - DNS TXT レコードの反映には、最大 10 分かかる場合があります
- ウェブサイトの作成を試みる前に、所有権を確認してください
無料サブドメイン
- テストやすぐに利用を始める場合は、無料サブドメインを使用してください
- 後からカスタムドメインを接続できます
注文
- すべてを取得するのではなく、フィルターを使って結果を絞り込んでください
- 共有アクセスの注文も、自分の注文と一緒に表示されます
データベース
- 指定した
nameとuserには、アカウントのusernameが自動的に接頭辞として付与されます。削除/パスワード変更/修復/phpMyAdmin の呼び出しでは、必ずリストエンドポイントで返される完全な名前を使用してください change-passwordの後、データベースを使用するウェブサイトの設定(例:wp-config.php)の認証情報を更新してくださいrepairは非同期で実行されます。すぐに結果が返ると想定せず、再度リストを取得するか、操作を再試行してください
サブドメインとパークドメイン
- ホスト配下に別のコンテンツ(
blog.example.com)を作るにはサブドメインを使用し、別のドメインから同じコンテンツを配信するにはパークドメインを使用してください - ホストが解決されるには、サブドメインの DNS が Hostinger を参照している必要があります
Node.js
from-archiveエンドポイントを優先してください。package.jsonからビルド設定を自動検出し、1 ステップで処理できます- ビルド状態が
runningの間は、ログエンドポイントをfrom_line(前回のlinesの件数)を指定してポーリングし、新しい出力のみをストリーミングしてください
WordPress
- インストール前に対象のウェブサイトが存在している必要があります。まず作成し、ウェブサイト一覧をポーリングしてください
- インストールは非同期です。
GET /wordpress/installationsをポーリングして完了を確認してください - 更新を無効にする理由がない限り、
auto_updates: minor(デフォルトで安全)を使用してください
トラブルシューティング
ウェブサイトの作成に失敗する
- (無料サブドメインを使用している場合を除き)まずドメインの所有権を確認してください
order_idが有効で、アクティブなホスティングプランに属していることを確認してください- 最初のウェブサイトでは、
datacenter_codeが必須です - ドメインの先頭に
www.を付けることはできません
ドメインの所有権確認に失敗する
- TXT レコードがまだ反映されていない可能性があります(最大 10 分お待ちください)
- TXT レコードが正しく設定されていることを確認してください:
dig TXT example.com - 正しいドメイン(サブドメインではなく、ルートドメイン)を確認していることを確認してください
データセンター一覧が空
order_idパラメーターが指定され、有効であることを確認してください- その注文では、どのデータセンターにも空き容量がない可能性があります
作成後にウェブサイトが表示されない
- ウェブサイトのプロビジョニングには数分かかります
- ウェブサイト一覧エンドポイントをポーリングし、利用可能になるタイミングを確認してください
データベース操作で 404 が返される
- 作成時に渡した短い名前ではなく、リストエンドポイントで取得した接頭辞付きの完全なデータベース名(例:
u123456789_appdb)を使用してください - パス内の
usernameが、データベースを所有するアカウントと一致することを確認してください
Node.js のビルドに失敗する
- ビルドログを確認してください:
GET .../nodejs/builds/{uuid}/logs - アーカイブ内に
package.jsonがあり、build_script/entry_fileが正しいことを確認してください node_versionがアプリに必要なバージョンと一致することを確認してください
WordPress のインストールが完了しない
- まずウェブサイトが存在することを確認してください(
GET /websites)。サイトが存在しないと、インストールは失敗します - インストールは非同期です。
GET /wordpress/installationsをポーリングしてください(usernameとdomainでフィルタリング) - 対象ディレクトリ内の既存ファイルを置き換える場合にのみ、
overwrite: trueを設定してください