スタジオ写真の完成には少し時間がかかります。システムから数秒ごとにLotShowへ完了したかを問い合わせることもできますが、完了した瞬間にLotShowからシステムに知らせることもできます。後者がWebhookで、LotShow APIはこの方法で結果を届けます。
ポーリングかWebhookか
ポーリングとは、ステータスが変わるまでコードがタイマーで GET /v1/jobs/{id} を呼び出し続けることです。動作はしますが、ほとんどの呼び出しは何も新しい情報を返さず、処理するクルマが増えるほど呼び出しも増えていきます。
Webhookはその流れを逆にします。ジョブを作成するときにURLをLotShowに渡しておくと、ジョブが完了した時点でLotShowがそのURLに結果をHTTPS POSTで送ります。システムは、やるべきことが発生するまで何もしなくて済みます。
イベント
- job.completed:スタジオ写真が完成し、完成画像のURLが含まれます。
- job.failed:写真を仕上げられず、クレジットが返還されました。
- credits.low:共有残高が20クレジットを下回りました。
エンドポイントごとに受け取るイベントを選べるので、在庫システムは完成写真だけを、請求ツールは残高不足だけを受け取る、といった使い分けができます。
届くデータの例
完了したジョブは小さなJSONとして届きます。
{
"event": "job.completed",
"created_at": "2026-10-14T09:41:40.000Z",
"id": "Hn4kR2pXq8VbT1sLw0Za",
"backdrop": "white-hall",
"vehicle_id": "pQ7mT2vK9cLx4RbN1sHd",
"name": "stock-4471",
"output_url": "https://firebasestorage.googleapis.com/v0/b/…/default.jpg?alt=media&token=…",
"seconds": 62,
"credits_left": 319
}id は、ジョブ作成時に返されたジョブIDです。だからこそ、自社システムで在庫番号の隣にジョブIDを保存しておく価値があります。Webhookはどのジョブが完了したかを教えてくれ、自社の記録はそれがどのクルマのものかを教えてくれます。
良いエンドポイントの作り方
- すぐに応答する。イベントが届いたらすぐに2xxステータスを返し、画像のダウンロードなど実際の処理はバックグラウンドで行います。
- 重複を想定する。LotShowはエンドポイントが応答するまで再送するため、タイムアウト後などに同じ配信が複数回届くことがあります。同じイベントを再び処理する前に、すでに処理済みかを確認しましょう。
- 順番を前提にしない。1秒違いで送った2つのジョブは、どちらが先に完了するかわかりません。届いた順ではなく、ジョブIDで結果を照合しましょう。
- 署名を確認する。すべての配信は「設定」にあるアカウントの署名シークレットで署名され、署名は
webhook-id、webhook-timestamp、webhook-signatureの各ヘッダーに入っています(Standard Webhooks方式)。検証できないものはすべて拒否しましょう。 - すべてを記録する。配信ごとに生のボディと受信時刻を保存しておきましょう。何かおかしいと感じたとき、最初に見るのはそのログです。
本番前のテスト
「設定」の各エンドポイントには「テストを送信」ボタンがあり、APIには POST /v1/webhooks/{id}/test があります。どちらもエンドポイントにサンプルイベントを送るので、クレジットを使わずにハンドラーを確認できます。エンドポイントが受け取る内容を正確に確かめるには、リクエストインスペクターやローカルトンネルが便利です。
失敗したジョブは無料
job.failed が届いた時点で、クレジットはすでに残高に戻っています。同じ写真を再送するのではなく、そのクルマに撮り直しのフラグを立てましょう。
開発を始める準備はできましたか?APIキーはProとEliteで使えます。「設定」の「APIキー」から作成してください。
