Skip to content
言語: 日本語

開発者向けAPI

売上と独自データをLinkHarborに送信する

2026年11月1日更新 約8分で読めます

売上コールバックでショップの売上をリンクのクリックに紐づけ、「Custom (API)」で自分のツールのライブデータをページに送ります。

LinkHarborは外部からのデータも受け付けます。2つのケースには、独自のシークレットを使う専用のエンドポイントがあり、APIキーは不要です。売上コールバックはショップの売上を報告するので、どのリンクが売上をもたらしたかを統計で確認できます。「Custom (API)」連携は、自分のツールのライブデータをウィジェットとしてページに表示し、プッシュ通知のきっかけにもなります。

売上コールバック:売上の紐づけ

クリックID(lt_click_id)、紐づけ、レポートの関係はコンバージョンと売上の紐づけで説明しています。ここでは開発者向けに、すべてのフィールドとレスポンスを示します。要点:LinkHarborがカウントしたクリックをhttpまたはhttpsのリンク先に転送するとき、パラメータlt_click_idを付加します。ショップはこれを記憶し、購入後に送り返します。

コールバックシークレットを作成する

「コールバックシークレット」カードがある「コールバック&API」ページ
コールバックシークレットは「コールバック&API」ページで作成します
  1. 「コールバック&API」を開きます
  2. 「コールバックシークレット」カードで「+ 新しいシークレットを作成」をクリックします
  3. 必要に応じて名前を付け(例:「ショップのコールバック」)、「シークレットを作成」をクリックします
  4. シークレットはすぐにコピーしてください。表示されるのは一度だけです
作成できる人
Creator Pro以上のオーナーと管理者です。Creator Freeでは「コールバックシークレットはCreator Pro以上で利用できます。」と表示されます。
数
ワークスペースごとに最大5つ(例:ショップごとに1つ)です。
「編集」
名前を変更し、ステータスを「有効」または「無効」に設定します。無効なシークレットでは、APIがコールバックを拒否します。
「↺ ローテーション」
新しいシークレットを生成します。古いものはすぐに使えなくなります。
「最終コールバック:」
シークレットが最後に正常に使われた日時を示します。

コールバックを送信する

POST /v1/callbacks/sale
curl -X POST https://dock.at-harbor.com/v1/callbacks/sale \
  -H "Content-Type: application/json" \
  -H "X-Callback-Secret: $LH_CALLBACK_SECRET" \
  -d '{
    "click_id": "3f1c2a9e-8d4b-4a51-9f0e-6b7c1d2e3f40",
    "order_id": "A-10023",
    "amount": "49.90",
    "currency": "EUR",
    "occurred_at": "2026-11-01T10:15:00Z"
  }'
# → {"ok":true,"conversion_id":123}
フィールド必須意味
click_idはいlt_click_idの値(10〜36文字)
order_idはい注文番号(1〜128文字)。各注文番号はワークスペースごとに1回だけ数えられます
amountはい小数で表した金額(例:"49.90")。負の値は不可
currencyはい3文字のコードで表した通貨(例:EUR)。小文字はAPIが変換します
occurred_atいいえ購入日時(ISO 8601)
amount_base_minor, base_currency, fx_rateいいえ複数の通貨で販売する場合の、最小単位に換算した金額、基準通貨、為替レート
metaいいえフラットなオブジェクトで表した独自の追加データ:1〜64文字のキーを最大50個。値はテキスト(最大500文字)、数値、true/false、nullのいずれかで、ネストしたオブジェクトやリストは拒否されます
workspace_idいいえワークスペースID。これを付けると、APIは不明なclick_idを403ではなく404で報告します
レスポンス意味
200 {"ok":true,"conversion_id":…}売上を保存しました。またはこのorder_idはすでに保存済みです(その場合は既存のコンバージョンのID)
403 forbiddenシークレットまたは署名が間違っている、またはclick_idが不明(workspace_idなしの場合)
403 secret_inactiveシークレットが「無効」に設定されています
404 not_foundclick_idが不明(workspace_idと有効なシークレットがある場合のみ)
413 request_too_large本文が1 MBを超えています
422 validation_failedフィールドがないか無効です(metaの値が長すぎる、ネストしているなど)
429 rate_limitedIPアドレスから1分あたり120件を超えるコールバック

任意の署名

シークレットに加えて、X-Callback-Signatureヘッダーを送信できます。これには、sha256=と、生の本文のHMAC-SHA256署名(16進数)が入ります。キーはシークレットそのものではなく、そのSHA-256ハッシュ(バイナリ)です。ヘッダーを送信する場合は正しい必要があり、そうでないとコールバックは拒否されます。

署名を計算する(PHP)
<?php
$body = json_encode($payload);
$key  = hash('sha256', getenv('LH_CALLBACK_SECRET'), true); // シークレットのバイナリハッシュ
$sig  = 'sha256=' . hash_hmac('sha256', $body, $key);
// ヘッダー: X-Callback-Secret と X-Callback-Signature: $sig、本文: $body

売上を確認する場所

報告された売上は、統計にコンバージョンとして表示されます。コンバージョンと売上の紐づけをご覧ください。APIでは、read:statsで/v1/stats/…/conversions/breakdownから読み取ります。

Custom (API):独自のライブデータ

「Custom (API)」連携を使えば、ゲームサーバーのプラグイン、ボット、cronスクリプトなど、HTTPリクエストを送れるプログラムであれば、LinkHarborにデータを送れます。データはページのライブウィジェットになり、プッシュルールでフォロワーに通知することもできます。

接続する

  1. ワークスペースで「連携」を開きます
  2. 「Custom (API)」を選び、名前を入力します
  3. 接続すると、ダイアログに「Ingest URL」と「シークレット」(「シークレットを表示」付き)が表示されます
  4. 両方を自分のツールに保存します

連携はCreator Pro以上で使えます。Ingest URLとシークレットを見られるのは、後で連携の詳細画面を開いた場合も含め、オーナーと管理者だけです。接続を解除して接続し直すと、新しいシークレットが作成されます。連携の一般的な接続方法は連携の接続、更新、解除で説明しています。

データを送信する

イベントとウィジェットの状態を送信する
curl -X POST "$INGEST_URL" \
  -H "Authorization: Bearer $INGEST_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "event": "player.joined",
    "event_id": "join-2026-11-01T20:01:02Z-steve",
    "data": { "player": "Steve" },
    "state": {
      "type": "game_server",
      "name": "Survival SMP",
      "online": true,
      "players_online": 3,
      "players_max": 20
    }
  }'
# → {"ok":true,"event_id":4711,"duplicate":false,"event_type":"player.joined"}
event
自由なイベント名です(例:player.joined)。小文字に変換され、プッシュルールが反応する名前になります。eventがない場合、イベントはstate.updatedと呼ばれます。
event_id
二重処理を防ぐ任意のキーです。同じevent_idが再び送信されると、LinkHarborはduplicate: trueを返し、何もしません。
data
プッシュのテキストのプレースホルダー(例:{player})に入る値です。最大40個のキーで、単純な値のみです。
state
ウィジェットの完全な状態です。以前の状態を完全に置き換えます。typeはgame_server(ゲームサーバーのカード)またはstatus(ステータスのカード)です。

Authorization: Bearerの代わりに、X-LinkHarbor-Secretヘッダーでシークレットを送ることもできます。IPアドレスごとに1分あたり120回まで呼び出せます。任意で本文に署名できます。X-LinkHarbor-Signatureヘッダーには、sha256=と、シークレットをキーとした生の本文のHMAC-SHA256署名が入ります。送信する場合は正しい必要があります。

レスポンス意味
200 {"ok":true,…}イベントを保存しました。既知のevent_idの場合はduplicate: true
400 invalid_json本文がJSONオブジェクトではありません
401 invalid_secretシークレットが間違っているか、Ingest URLが不明です
401 signature_invalidX-LinkHarbor-Signatureが本文と一致しません
413 request_too_large本文が64 KBを超えています
422 validation_failed本文にeventもstateもありません
429 rate_limitedIPアドレスから1分あたり120回を超える呼び出し

答えが見つかりませんか?

お困りのことをお知らせください。サポートチームが個別にお手伝いします。

サポートに問い合わせる