Hachiko Local API

Hachiko ローカルAPI仕様書

このページは、Hachiko のローカル HTTP API を使って通知送信や状態確認をしたいユーザー向けの仕様書です。 PowerShell、バッチ、別アプリ、常駐ツールなどから Hachiko を呼び出すときの基本形をまとめています。

関連資料: 更新案内仕様

対応バージョン: Hachiko v1.x
Document version: 2026-06-17
Web UI とローカル API は同じ Service、同じポートで動きます。 既定ポートは 8080 ですが、Tray の Change port and restart で変更している場合は、そのポート番号を使ってください。 たとえば Web UI を http://127.0.0.1:8081/ で開いているなら、 API のベース URL も http://127.0.0.1:8081 です。

Quick Start

まずは疎通確認

最初に GET /health を呼ぶと、Hachiko Service が起動しているか確認できます。

Invoke-RestMethod http://127.0.0.1:8080/health

Supported Targets

通知先

無料本体で使える通知先は次の 4 つです。channel にはこの値を使います。

discord slack telegram teams

Security

セキュリティ上の注意

  • ローカル API は、原則として 127.0.0.1 からの利用を想定しています。
  • LAN やインターネットへ公開しないでください。
  • ポートを外部公開すると、第三者に通知送信や設定変更を実行される可能性があります。
  • bind_address を変更する場合は、その影響を理解したうえで使用してください。

Authentication

API の認証について

現在の無料本体のローカル API には、API キー、Bearer Token、Basic 認証などの HTTP 認証機構はありません。

そのため、安全性は主に 127.0.0.1 バインドと、 外部公開しない運用に依存します。

Notify

通知送信: POST /notify

Hachiko に通知を依頼するための基本 API です。 通知はキューに入ってから送信されるため、レスポンスが返った時点では「受付完了」です。

POST /notify

JSON を送信します。titlebody は必須です。

フィールド 必須 説明
title string はい 通知タイトルです。
body string はい 通知本文です。
channel string いいえ 指定すると、その通知先 1 つだけへ送ります。省略すると、有効化されているすべての通知先へ個別にキュー投入します。
metadata object いいえ 補助情報です。文字列キーと文字列値の組だけを入れてください。
Invoke-RestMethod -Method Post -Uri http://127.0.0.1:8080/notify -ContentType application/json -Body '{"title":"Build finished","body":"The first Hachiko notification arrived.","channel":"discord"}'
Invoke-RestMethod -Method Post -Uri http://127.0.0.1:8080/notify -ContentType application/json -Body '{"title":"Nightly build","body":"Send to every enabled target"}'
{
  "id": "2f8f6cf4-1f9e-49da-bf1a-0b61bc53e7df",
  "accepted": true,
  "notification_ids": [
    "2f8f6cf4-1f9e-49da-bf1a-0b61bc53e7df"
  ],
  "accepted_count": 1
}

Status

状態確認 API

GET /health

Service が応答しているかだけを軽く確認したいときに使います。

{
  "status": "ok",
  "queued_count": 0
}
GET /status

現在の設定も含めた状態を取得します。Web UI の表示元の 1 つです。

GET /dashboard

/status/history/summary をまとめた画面向け API です。

Test Notify

接続テストとテスト送信: POST /notify/test

この API は、Web UI の接続確認とテスト送信用です。 通常の外部連携よりも、設定確認や初期セットアップ時の動作確認に向いています。

POST /notify/test

channel は必須です。 modeconnection を指定するとその場で接続確認、 queue を指定すると通常の通知キューへ積んで確認します。

フィールド 必須 説明
channel string はい 確認対象の通知先です。discordslacktelegramteams のいずれかを指定します。
title string いいえ テスト通知タイトルです。省略時は既定値が使われます。
body string いいえ テスト通知本文です。省略時は既定値が使われます。
mode string いいえ connection または queue を指定します。省略時は接続確認として扱います。
Invoke-RestMethod -Method Post -Uri http://127.0.0.1:8080/notify/test -ContentType application/json -Body '{"channel":"discord","mode":"connection"}'
{
  "ok": true,
  "mode": "connection",
  "queued": false,
  "notification_id": null,
  "message": "接続テストに成功しました",
  "error_code": null,
  "error_message": null
}

History

履歴 API

GET /history

通知履歴の一覧です。各レコードには受付時刻、処理時刻、失敗コードが入ります。

[
  {
    "id": "bb3c8cf4-371b-4f26-98fd-db7344409588",
    "request": {
      "title": "Hachiko test (discord)",
      "body": "Web UI からのテスト送信です",
      "channel": "discord",
      "metadata": {}
    },
    "status": "queued",
    "received_at": "2026-06-16T11:14:11.2956178Z",
    "processed_at": null,
    "error_code": null,
    "error_message": null
  }
]
GET /history/summary

最近の総件数、成功件数、再試行待ち件数、失敗件数と、最後の時刻情報を返します。

{
  "recent_total": 1,
  "recent_success_count": 0,
  "recent_retry_waiting_count": 1,
  "recent_failed_count": 0,
  "last_received_at": "2026-06-16T11:14:11.2956178Z",
  "last_sent_at": null,
  "last_failure_at": null
}

Settings

設定取得と部分更新

GET /settings

現在の設定内容をそのまま JSON で返します。

POST /settings/update

設定の一部だけを更新します。送った項目だけが反映されます。 この API で変えられるのは loggingfile_watchnotification_targets です。 ポート変更はこの API ではなく、Tray の Change port and restart から行います。

{
  "notification_targets": {
    "discord": {
      "enabled": true,
      "settings": {
        "webhook_url": "https://discord.com/api/webhooks/..."
      }
    }
  }
}
{
  "updated": true,
  "reloaded_sections": [
    "notification_targets"
  ],
  "validation_errors": []
}
{
  "logging": {
    "enabled": true,
    "retention_days": 30
  },
  "file_watch": {
    "enabled": true,
    "watch_roots": [
      "C:\\watch"
    ],
    "recursive": true,
    "notify_on_created": true,
    "notify_on_deleted": true,
    "notify_on_size_changed": true,
    "notify_on_modified_time_changed": true,
    "notify_on_extension_changed": true
  }
}

Error Responses

失敗レスポンス例

Hachiko のローカル API では、エンドポイントごとに失敗時の返し方が少し異なります。 特に /settings/update は構造化されたバリデーションエラーを返します。

POST /settings/update

存在しないフォルダを監視対象にした場合の例です。

{
  "updated": false,
  "reloaded_sections": [],
  "validation_errors": [
    {
      "category": "file_watch",
      "field": "watch_roots",
      "code": "path_not_found",
      "message": "file_watch.watch_roots path was not found: C:\\not-found"
    }
  ]
}
POST /notify/test

接続テストで通知先が無効な場合の例です。

{
  "ok": false,
  "mode": "connection",
  "queued": false,
  "notification_id": null,
  "message": "接続テストに失敗しました",
  "error_code": "target_disabled",
  "error_message": "discord target is disabled"
}

Webhook Setup

通知先設定の要点

  • Discord: notification_targets.discord.settings.webhook_url に Webhook URL を入れます。
  • Slack: notification_targets.slack.settings.webhook_url に Incoming Webhook URL を入れます。
  • Telegram: bot_tokenchat_id を入れます。
  • Microsoft Teams: notification_targets.teams.settings.webhook_url に Workflows の Webhook URL を入れます。

Notes

補足

  • 通知はまずキューへ入り、送信結果は /history に残ります。
  • 送信失敗時は最大 3 回まで再試行します。
  • 失敗内容は error_codeerror_message で確認できます。
  • ファイル監視通知も、内部的には同じ通知キューと履歴を使います。