開発者向けAPI
確認しに来なくても、こちらからお知らせ
URLを登録してイベントを選ぶだけ。変化があると数秒以内に署名付きのPOSTを送り、失敗した場合は最長24時間再試行します。
イベント
rate.updatedいずれかの銀行で為替レートが変わったrate.best_changed最安の売値または最高の買値が変わったrate.threshold_crossedレートが設定した基準を超えたcbe.rate_changed中央銀行のレートが変わったgold.updated金価格が変わったsilver.updated銀価格が変わったtransfer.quotes_updated送金事業者の価格が変わったcertificate.created銀行が新しい預金証書を発売したcertificate.rate_changed預金証書の利回りが変わったtbill.auction_result国債の入札結果fund.price_updatedファンドの基準価額が更新されたstatus.incidentサービス障害が発生または終了した送信する内容
POST https://example.com/geneh
Geneh-Event: rate.best_changed
Geneh-Signature: t=1792118220,v1=5f2b9c1e7a
{
"id": "evt_01JB7Q2K",
"type": "rate.best_changed",
"created_at": "2026-10-16T00:37:00Z",
"data": {
"currency": "USD",
"side": "sell",
"previous": { "bank": "nbe", "rate": 53.52 },
"current": { "bank": "credit_agricole", "rate": 53.47 }
}
}署名を確認する
各リクエストはエンドポイントのシークレットを使いHMAC SHA-256で署名されます。5分より古いものは拒否してください。
import crypto from "node:crypto";
function verify(rawBody, header, secret) {
const [t, v1] = header.split(",").map(p => p.split("=")[1]);
const mac = crypto.createHmac("sha256", secret)
.update(t + "." + rawBody).digest("hex");
const fresh = Math.abs(Date.now() / 1000 - t) < 300;
return fresh && crypto.timingSafeEqual(Buffer.from(mac), Buffer.from(v1));
}配信と再試行
- タイムアウト
- 10秒以内に2xxで応答してください
- 再試行
- 24時間で8回、毎回間隔を広げて再試行します
- 重複
- 同じイベントが2回届くことがあるので、idを使って重複を除いてください
- 順序
- 順序は保証されないため、created_atで比較してください
- 一時停止
- 3日間失敗が続くとエンドポイントを一時停止してメールでお知らせします。届かなかった分は再送できます
あなたのエンドポイント
Webhookはまもなく登場Webhookの公開後、ここでエンドポイントを追加できます。Pro以上のプランで利用できます。
近日公開