Bango API ドキュメント
法人番号APIとインボイスAPIを統合した通常APIと、変更監視・Webhookの各操作の仕様をまとめています。 通常APIの実行確認は Playground を利用してください。
Playgroundで試す概要
法人番号APIとインボイスAPIを統合し、法人と個人事業主の両ケースをJSONで返します。
データ更新方針
国税庁の「法人番号公表サイト」と「適格請求書発行事業者公表サイト」の公表データを出典とし、日次で差分同期しています。取り込んだデータは統合・正規化・名寄せを行って提供します。反映のタイミングは国税庁の公表状況に依存するため、常に最新であることを保証するものではありません。各レスポンスの meta.source では、データの出典(name)と、取得できる場合は更新日(updated_at)を確認できます。Bango APIは国税庁の公表データを加工して提供するサービスであり、国税庁が本サービスの内容を保証するものではありません。
認証
通常検索・バッチ・watch登録・変更イベントのpullは x-api-key ヘッダーにAPIキーを指定します。キーはダッシュボードから発行・失効できます。Webhook管理・変更監視画面用APIはログイン利用者の Authorization: Bearer <JWT> を使います。APIキーで管理操作はできません。
レート制限
Freeプランでもバッチ名寄せを含む全エンドポイントを利用できます(通常APIは月500コール、バッチ名寄せは月50件まで)。月次の上限とは別に、プランごとに分あたりのリクエスト上限があります。現在の分あたり上限と残数は、レスポンスの X-RateLimit-Limit / X-RateLimit-Remaining ヘッダーで確認できます(上限超過時は429と Retry-After を返します)。これらの技術的制限は、安定運用のため変更することがあります。
エラー
APIのエラーは RFC 9457 の application/problem+json で返します。エラーコードの意味と回復手順は、変更監視・Webhookのコードを含めて エラーリファレンス にまとめています。変更監視・Webhookの各operationが返すstatusとコードは、下の各operationの表で確認できます。
機械可読リソース
OpenAPI仕様とAIエージェント向けの概要を公開しています。
クイックスタート
最短で疎通確認するための手順です。まずは統合レスポンス `GET /v1/companies/{corporate_number}` で法人情報とインボイス情報をまとめて確認します。
1.
x-api-keyを発行してヘッダーに設定します。2.
GET /v1/companies/{corporate_number}を実行します。3. 返却された法人情報とインボイス情報(
invoice.*)を実装側の型に反映します。変更監視を使う場合は 変更監視・Webhookの初回導入 のプランごとの上限・watch登録・受信サンプルを確認します。
補足: curlの出力を整形する場合は
| jq .を使うと日本語のまま表示できます。python3 -m json.toolは既定の設定で日本語を\uXXXXにエスケープ表示しますが、APIの返却値自体はUTF-8の日本語のままです。
バッチ名寄せの使い方
大量データは `POST /v1/batch/match` を起点に非同期で処理します。進捗確認とダウンロード導線までを一連で確認できます。
1.
companiesに企業名を複数行で入力してジョブを作成します。2.
GET /v1/batch/{job_id}を2秒間隔で確認しstatusがcompletedになるまで待ちます。3. 完了後に
GET /v1/batch/{job_id}/downloadでjson/csvを取得します。
個人事業主への対応
個人事業主ケースでは、Bango APIのプライバシー保護方針により個人を識別しうる情報を公開レスポンスで非開示とするため、表示・保存ロジックの分岐を事前に設計します。
GET /v1/invoice/{registration_number}でkind = individualの場合、corporate_numbernamename_kananame_enaddresstrade_namepopular_nameは意図的にnullで返します。これは取得失敗やデータ欠損を意味しません。元データ側または内部DBで値を取得・保持できる場合でも、Bango APIでは個人情報・プライバシー保護のため公開APIから再配布しない方針です。
インボイス登録番号、登録状態、登録日、取消日、失効日、有効性、country、updated_at など、個人を直接識別する情報に当たらない現行フィールドは引き続き返します。
アプリ側では
null前提で表示をフォールバックし、インボイス有効性 (invoice.*) を中心に業務判定を行ってください。
過去日付での有効性確認
`date=YYYY-MM-DD` を渡すことで、過去時点での登録有効性を判定できます。監査・経費精算用途では必須の確認です。
GET /v1/invoice/{registration_number}/valid?date=2024-10-01のように実行します。dateは時刻・タイムゾーンを持たない暦日(YYYY-MM-DD)です。dateを省略した場合はJST(日本標準時)の今日を判定基準日とし、レスポンスのdateに解決後の日付を返します。現在時点の有効性を確認したいときはdateなしで実行できます。取消日・失効日は当日から無効として判定されます。
返却される
validとcancel_dateexpire_dateを使って、対象日での取引妥当性を判断します。
変更監視・Webhookの初回導入
プランごとの上限を確認し、watchを登録して変更イベントを取得します(最短A)。Webhookで受け取る場合は受信先を設定し、テスト送信で署名検証と応答を確認してから通常イベントの受信に備えます(最短B)。
はじめに(監視対象とPull・Webhook)
監視対象(watch)は、法人番号13桁またはT番号(T + 13桁)で登録する法人・個人事業主です。登録時には現在の公表データをbaselineとして返し、以後に検出した公表データの変化を変更イベント(change_event)として記録します。
変更イベントの受け取り方は2つです。Pullは、APIキーで GET /v1/change-events を呼んで保持期間内のイベントを取得します。incrementalでは保存したcheckpointから続きを取得し、欠落を 410 CHANGE_EVENT_HISTORY_GAP で検知できます。Webhookは、登録したHTTPSの受信先へ署名付きでイベントを送ります。Webhookだけで取りこぼしがないことは保証しないため、必要に応じてPullで補完します。
どちらもFreeから利用できます。監視対象の上限・Webhook通知先の数・イベントの保持期間はプランごとに異なります。
プランごとの上限
| プラン | pull | watch | Webhook通知先 | 保持 |
|---|---|---|---|---|
| Free | 対応 | 5件 | 1件 | 7日 |
| Starter | 対応 | 100件 | 1件 | 90日 |
| Growth | 対応 | 1,000件 | 2件 | 90日 |
| Pro | 対応 | 10,000件 | 3件 | 90日 |
| Enterprise | 対応 | 一律上限なし | 10件 | 365日 |
表は横にスクロールできます。
watch / Webhook通知先はactive件数です。プランごとの上限は 料金プラン で確認できます。
Enterpriseのwatchは一律application上限なし(active_watch_limit=null)です。nullは処理性能や個別の容量保証を意味しません。
最短A: APIキーで変更イベントを取得する
プランごとの上限を確認する
アカウント登録後、料金プランでプランごとの上限を確認します。変更イベントのpullとWebhookはFreeから利用でき、監視対象の上限と通知先の数はプランごとに異なります。契約中のプランは課金管理で確認します。
先にcheckpointを保存する
APIキー管理でキーを発行し、watchを登録する前に
GET /v1/change-events?mode=incremental&start=nowを呼んで、返ったnext_cursorをcheckpointとして保存します。start=nowは呼び出し時点のstream末尾をcheckpointにするため、watch登録の後に呼ぶと、登録からcheckpoint作成までの間に検知された変更イベントが取得できなくなります。APIキーでwatchを登録する
下のcURL例の
YOUR_API_KEYとYOUR_IDENTIFIERを置き換えてPUT /v1/watch-targets/{identifier}でwatchを登録し、返るbaseline(現在値のfull snapshot)を自社のマスタへ反映します。identifierは法人番号13桁またはT+ 13桁です。法人番号を持たない個人事業主もT番号で登録できます。baselineは現在値で、過去の変更通知ではありません。checkpointから変更イベントを取得する
保存した
next_cursorをcursorに渡してincrementalで続きを取得し、各イベントのsubject.versionをマスタに保存したbaselineのversionと比較して新しいものだけ反映します。処理を終えたら新しいnext_cursorを保存します。保持中の履歴を見るだけなら、開始指定なしのhistoryで先頭から列挙します(best-effortで、完全な履歴ではありません)。Data planeの各リクエストは月間APIコールに計上されます。
最短B: Webhookで変更イベントを受け取る
最短Aでcheckpointを保存しwatchを登録したあと、受信先を設定します。
受信URLと署名鍵を設定する
owner / adminが変更監視画面の「Webhook」タブで公開HTTPSの受信URLとevent typeを設定します。管理APIはログイン利用者の
Authorization: Bearer <JWT>を使い、APIキーとは別です。作成・鍵更新時に一度だけ表示されるsecretを安全に保管し、受信側に設定します。テスト送信で受信を確認する
「Webhook」タブで受信先の詳細を開き、テスト送信で署名検証と2xx応答を確認します。画面の「送信結果」が成功であることを確認してください。管理APIを直接呼ぶ場合はHTTP 200だけで判断せず、結果の
successを確認します。endpoint.testは疎通専用で、業務更新・inboxには保存しません。通常イベントはwatch登録後に検出された対象の変更を待ちます。テスト成功は通常イベント受信の証明ではありません。
イベントの種類
- company.updated
名称・所在地など、法人固有の公表項目が変わりました。法人に埋め込まれたインボイス情報だけの変化ではこの種類になりません。
- company.closed
法人の
activeがtrueからfalseになりました(閉鎖)。- company.deleted
法人の公表データがなくなりました。
data.current.companyはnullになり、公表中のインボイス情報は残ります。- company.restored
なくなっていた法人の公表データが、再び公表されました。
- invoice.updated
他の種類に当たらないインボイス登録情報の変化です。将来日付の登録が公表された場合もこの種類です。
- invoice.deleted
インボイス登録の公表データがなくなりました。
data.current.invoiceはnullになります。- invoice.validity_changed
インボイス登録の有効性(
valid)が反転しました。登録日・取消日・失効日の到来による変化もこの種類で、transitionに変化前後と理由が入ります。
1回の変化が複数の種類に当たる場合は、優先順位の高い1つの種類で届きます。すべての変化は
changesとtransitionで確認します。data.currentには、法人(company)とインボイス(invoice)の変更後の全項目(full snapshot)が入ります。data.changesは変更前後の差分で、受信側のマスタ更新にはdata.currentを使います。個人事業主は
companyがnullです。公表されていない個人の情報を補完して返すことはありません。endpoint.testはWebhook受信先の疎通テストで、業務上の変化を表すイベントではありません。subjectもdata.currentも持ちません。以下は架空の法人の住所変更を表した代表例です(実在の企業ではありません)。
{
"id": "evt_5b2f8c3e-91d4-4a6b-8e27-3c0f6a9d1b48",
"object": "change_event",
"schema_version": "2026-09",
"type": "company.updated",
"origin": "source_change",
"subject": {
"id": "sub_c3a1e7d2-6f4b-4e89-a0d5-7b2e9f1c8a63",
"kind": "corporation",
"version": "12",
"corporate_number": "1234567890123",
"registration_number": "T1234567890123"
},
"resource": {
"type": "company",
"id": "1234567890123"
},
"detected_at": "2026-10-01T02:00:00Z",
"snapshot_at": "2026-10-01T02:00:00Z",
"effective_date": null,
"data": {
"previous": null,
"current": {
"company": {
"corporate_number": "1234567890123",
"name": "サンプル株式会社",
"name_kana": "サンプル",
"name_en": null,
"name_image_id": null,
"kind": "株式会社",
"kind_code": "301",
"address": {
"prefecture": "東京都",
"city": "港区",
"street": "芝公園四丁目2番8号",
"full": "東京都港区芝公園四丁目2番8号",
"post_code": "1050011",
"prefecture_code": "13",
"city_code": "13103",
"prefecture_en": null,
"city_en": null,
"image_id": null
},
"address_outside": null,
"active": true,
"closure": null,
"assignment_date": "2015-10-05",
"updated_at": "2026-09-30",
"search_excluded": null,
"revision": {
"sequence_number": null,
"published_date": null,
"change_date": null,
"process": null,
"correct": null,
"change_cause": null,
"latest": null
},
"invoice": {
"found": true,
"registration_number": "T1234567890123",
"registered": true,
"registration_date": "2023-10-01",
"cancel_date": null,
"expire_date": null,
"valid": true,
"country": "domestic"
}
},
"invoice": {
"kind": "corporation",
"corporate_number": "1234567890123",
"name": "サンプル株式会社",
"name_kana": "サンプル",
"name_en": null,
"trade_name": null,
"popular_name": null,
"country": "domestic",
"address": {
"prefecture": "東京都",
"city": "港区",
"street": "芝公園四丁目2番8号",
"full": "東京都港区芝公園四丁目2番8号",
"post_code": "1050011",
"prefecture_code": "13",
"city_code": "13103",
"prefecture_en": null,
"city_en": null,
"image_id": null
},
"address_request": null,
"address_inside": null,
"address_outside": null,
"active": true,
"closure": null,
"assignment_date": "2015-10-05",
"updated_at": "2023-10-01",
"revision": null,
"invoice": {
"found": true,
"registration_number": "T1234567890123",
"registered": true,
"registration_date": "2023-10-01",
"cancel_date": null,
"expire_date": null,
"valid": true,
"country": "domestic"
}
}
},
"changes": [
{
"path": "/company/address/city",
"previous": "千代田区",
"current": "港区"
},
{
"path": "/company/address/city_code",
"previous": "13101",
"current": "13103"
},
{
"path": "/company/address/full",
"previous": "東京都千代田区丸の内一丁目1番1号",
"current": "東京都港区芝公園四丁目2番8号"
},
{
"path": "/company/address/post_code",
"previous": "1000005",
"current": "1050011"
},
{
"path": "/company/address/street",
"previous": "丸の内一丁目1番1号",
"current": "芝公園四丁目2番8号"
},
{
"path": "/company/updated_at",
"previous": "2015-10-05",
"current": "2026-09-30"
},
{
"path": "/invoice/address/city",
"previous": "千代田区",
"current": "港区"
},
{
"path": "/invoice/address/city_code",
"previous": "13101",
"current": "13103"
},
{
"path": "/invoice/address/full",
"previous": "東京都千代田区丸の内一丁目1番1号",
"current": "東京都港区芝公園四丁目2番8号"
},
{
"path": "/invoice/address/post_code",
"previous": "1000005",
"current": "1050011"
},
{
"path": "/invoice/address/street",
"previous": "丸の内一丁目1番1号",
"current": "芝公園四丁目2番8号"
}
],
"transition": null
},
"source": {
"name": "nta",
"updated_at": "2026-09-30",
"revision": null
}
}watch登録と署名検証のサンプル
受信したraw bodyをJSON parserへ渡す前に、公式Standard Webhooks SDKと webhook-id / webhook-timestamp / webhook-signature で検証します。再serializeしたJSONでは署名が一致しません。以下は既存受信例からの署名検証の抜粋です(JS 1.1.1 / Python 1.1.0)。HTTP入口・DB・worker・TLSは含みません。
curl 'https://api.bango-api.jp/v1/change-events?mode=incremental&start=now' \ -H 'x-api-key: YOUR_API_KEY' curl -X PUT 'https://api.bango-api.jp/v1/watch-targets/YOUR_IDENTIFIER' \ -H 'x-api-key: YOUR_API_KEY'
通常イベントの受信・重複・再送
- COMMIT後に2xxを返し、重複を排除する
署名検証とpayload構造確認後、consumerとevent ID(
webhook-id=body.id)を一意キーにしてdurable inboxへ保存し、COMMIT後に2xxを返します。同じIDの再受信は重複として2xxで受け付け、業務副作用を重ねません。署名不正・保存失敗で2xxを返さず、body・header・secretはログに出しません。- 順序とsubject versionを確認する
配送はat-least-onceで、順序やexactly-onceは保証しません。古いsnapshotで現在値を上書きしないようsubject versionを比較します。個人事業主の
company=nullと未知のschema/typeを扱い、未知のイベントを既知の更新として適用しません。- 再送期限と重複排除の期間を分ける
一時的な受信失敗は再送対象です。最大10 attemptですが回数は保証せず、期限はcycle開始+96時間とevent保持期限の早い方です。retry / replayではevent IDとbodyは同じで、timestamp・署名は変わります。重複排除の保存期間は5分や96時間ではなく、eventが再到達し得る保持期間と監査要件から決めます。
- 410・redirect・鍵更新を扱う
410はendpoint全体をgoneにして未完了配送を取り消すため、一時障害で返しません。3xxは追跡しないので最終URLを登録します。漏洩時は鍵のimmediate更新と受信側旧鍵の除去、通常のgraceful更新では旧鍵を24時間併置し、新鍵でテストします。
pull補完・停止・解約
- historyとcheckpointを使い分ける
変更イベントのhistoryは保持中履歴のbest-effort列挙で、完全履歴や復旧完了を意味しません。Data APIは古い順、画面の「変更イベント」タブは新しい順で、両者のcursorは流用できません。checkpointとして保存するのはincrementalの
next_cursorだけです。Webhookの最新event IDやhistory cursorをcheckpointへ昇格しません。ページ内の受付または業務処理と原子的にcheckpointを進めます。- gapは新checkpointから復旧する
410 CHANGE_EVENT_HISTORY_GAPの復旧は、先にGET /v1/change-events?mode=incremental&start=nowで新checkpointを保存→active watchを列挙してPUT / GET-oneのfresh baselineをversion比較で反映→保存checkpointからincremental取得、の順です。この間のwatch編集を止めるか再列挙で照合します。再びgapなら最初からやり直します。失効した業務履歴は復元できません。自動gap修復や汎用pullエンジンは本サンプルに含みません。- pause・resume・replayで停止と再送を分ける
一時停止は画面のpause、対象監視の停止は
DELETE /v1/watch-targets/{identifier}です。pauseは新しい配送とclaimを止め、pending / retryingを取り消しますが、送信中の1 attemptは完了し得ます。resumeは停止中のeventや取り消した配送を自動送信しません。exhausted / canceledの既存配送はendpoint active・event未失効の場合にreplayでき、配送自体がないeventはpullで補います。
/v1/companies/{corporate_number}
法人番号検索
13桁の法人番号から法人情報とインボイス情報を返します。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| corporate_number | path | string | Yes | 13桁の法人番号 |
リクエスト例
curl -H 'x-api-key: YOUR_API_KEY' \ 'https://api.bango-api.jp/v1/companies/1180301018771'
レスポンス例
{
"object": "company",
"schema_version": "2026-08",
"data": {
"corporate_number": "1180301018771",
"name": "トヨタ自動車株式会社",
"name_kana": "トヨタジドウシャ",
"name_en": null,
"kind": "株式会社",
"kind_code": "301",
"address": {
"prefecture": "愛知県",
"city": "豊田市",
"full": "愛知県豊田市トヨタ町1番地"
},
"active": true,
"closure": null,
"assignment_date": "2015-10-05",
"updated_at": "2019-04-23",
"invoice": {
"found": true,
"registration_number": "T1180301018771",
"registered": true,
"registration_date": "2023-10-01",
"cancel_date": null,
"expire_date": null,
"valid": true
}
},
"links": {
"self": "https://api.bango-api.jp/v1/companies/1180301018771",
"docs": "https://bango-api.jp/docs",
"invoice": "https://api.bango-api.jp/v1/invoice/T1180301018771"
},
"meta": {
"source": { "name": "nta", "updated_at": "2019-04-23" },
"rate_limit": {
"unlimited": false,
"limit": 6000,
"remaining": 598,
"reset": "2026-01-15T00:01:00Z"
},
"quota": {
"api_requests": { "unlimited": false, "limit": 10000, "remaining": 9876 },
"batch_rows": null
}
}
}レスポンス項目
| field | type | nullable | description |
|---|---|---|---|
| object | string | No | オブジェクト種別(例: company / invoice_issuer / batch_job) |
| schema_version | string | No | 現行構造の最終変更年月(YYYY-MM・情報提供専用) |
| data | object | No | レスポンス本体。以降のフィールドは data 内側の構造 |
| links | object | No | 関連リンク。self/docs は常設、関連キー(invoice/company/next 等)はエンドポイント別で値なしはnull |
| meta | object | No | source(NTA更新日)・rate_limit・quota(api_requests/batch_rows)。batch_rows は batch系のみnon-null |
| corporate_number | string | No | 13桁の法人番号 |
| name | string | No | 商号または名称 |
| name_kana | string | Yes | 商号または名称(カナ表記) |
| name_en | string | Yes | 商号または名称(英語表記) |
| kind | string | No | 法人種別(例: 株式会社) |
| address.full | string | Yes | 本店所在地の完全住所 |
| active | boolean | No | 現時点で活動中かどうか |
| assignment_date | string | Yes | 法人番号指定日(YYYY-MM-DD) |
| updated_at | string | Yes | 最終更新日(YYYY-MM-DD) |
| invoice.found | boolean | No | インボイス情報が見つかったかどうか |
| invoice.registration_number | string | Yes | インボイス登録番号(T + 13桁) |
| invoice.registered | boolean | No | 適格請求書発行事業者として登録されているか |
| invoice.registration_date | string | Yes | 登録日(YYYY-MM-DD) |
| invoice.cancel_date | string | Yes | 取消日(YYYY-MM-DD) |
| invoice.expire_date | string | Yes | 失効日(YYYY-MM-DD) |
| invoice.valid | boolean | Yes | 現時点で有効な登録番号かどうか |
/v1/invoice/{registration_number}
T番号検索
T番号から法人情報または個人事業主情報(個人情報はnull)を返します。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| registration_number | path | string | Yes | T + 13桁の登録番号 |
リクエスト例
curl -H 'x-api-key: YOUR_API_KEY' \ 'https://api.bango-api.jp/v1/invoice/T1180301018771'
レスポンス例
{
"object": "invoice_issuer",
"schema_version": "2026-08",
"data": {
"corporate_number": null,
"kind": "individual",
"name": null,
"address": null,
"invoice": {
"found": true,
"registration_number": "T6810924593403",
"registration_date": "2026-01-01",
"valid": true
}
},
"links": {
"self": "https://api.bango-api.jp/v1/invoice/T6810924593403",
"docs": "https://bango-api.jp/docs",
"company": null
},
"meta": {
"source": { "name": "nta", "updated_at": "2026-01-13" },
"rate_limit": {
"unlimited": false,
"limit": 6000,
"remaining": 598,
"reset": "2026-01-15T00:01:00Z"
},
"quota": {
"api_requests": { "unlimited": false, "limit": 10000, "remaining": 9876 },
"batch_rows": null
}
}
}レスポンス項目
| field | type | nullable | description |
|---|---|---|---|
| object | string | No | オブジェクト種別(例: company / invoice_issuer / batch_job) |
| schema_version | string | No | 現行構造の最終変更年月(YYYY-MM・情報提供専用) |
| data | object | No | レスポンス本体。以降のフィールドは data 内側の構造 |
| links | object | No | 関連リンク。self/docs は常設、関連キー(invoice/company/next 等)はエンドポイント別で値なしはnull |
| meta | object | No | source(NTA更新日)・rate_limit・quota(api_requests/batch_rows)。batch_rows は batch系のみnon-null |
| corporate_number | string | Yes | 法人の場合は13桁の法人番号、個人事業主はnull |
| kind | string | No | 種別(法人または individual) |
| name | string | Yes | 名称。個人事業主ケースではnull |
| name_kana | string | Yes | 名称カナ。個人事業主ケースではnull |
| trade_name | string | Yes | 個人事業主の屋号。存在しない場合はnull |
| popular_name | string | Yes | 個人事業主の通称・旧姓。存在しない場合はnull |
| address | object | Yes | 所在地情報。個人事業主ケースではnull |
| invoice.found | boolean | No | インボイス情報が見つかったかどうか |
| invoice.registration_number | string | No | インボイス登録番号(T + 13桁) |
| invoice.registration_date | string | Yes | 登録日(YYYY-MM-DD) |
| invoice.cancel_date | string | Yes | 取消日(YYYY-MM-DD) |
| invoice.expire_date | string | Yes | 失効日(YYYY-MM-DD) |
| invoice.valid | boolean | No | 現時点で有効な登録番号かどうか |
/v1/invoice/{registration_number}/valid
過去日付有効性確認
指定日付時点で登録番号が有効かを判定します。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| registration_number | path | string | Yes | T + 13桁 |
| date | query | string | No | 判定対象の暦日(YYYY-MM-DD、時刻・タイムゾーンなし)。省略時はJST今日で判定します。 |
リクエスト例
curl -G -H 'x-api-key: YOUR_API_KEY' \ --data-urlencode 'date=2024-10-01' \ 'https://api.bango-api.jp/v1/invoice/T1180301018771/valid'
レスポンス例
{
"object": "invoice_validity",
"schema_version": "2026-08",
"data": {
"registration_number": "T1180301018771",
"date": "2024-10-01",
"valid": true,
"registration_date": "2023-10-01",
"expire_date": null,
"cancel_date": null
},
"links": {
"self": "https://api.bango-api.jp/v1/invoice/T1180301018771/valid",
"docs": "https://bango-api.jp/docs",
"invoice": "https://api.bango-api.jp/v1/invoice/T1180301018771"
},
"meta": {
"source": { "name": "nta", "updated_at": "2021-10-28" },
"rate_limit": {
"unlimited": false,
"limit": 6000,
"remaining": 598,
"reset": "2026-01-15T00:01:00Z"
},
"quota": {
"api_requests": { "unlimited": false, "limit": 10000, "remaining": 9876 },
"batch_rows": null
}
}
}レスポンス項目
| field | type | nullable | description |
|---|---|---|---|
| object | string | No | オブジェクト種別(例: company / invoice_issuer / batch_job) |
| schema_version | string | No | 現行構造の最終変更年月(YYYY-MM・情報提供専用) |
| data | object | No | レスポンス本体。以降のフィールドは data 内側の構造 |
| links | object | No | 関連リンク。self/docs は常設、関連キー(invoice/company/next 等)はエンドポイント別で値なしはnull |
| meta | object | No | source(NTA更新日)・rate_limit・quota(api_requests/batch_rows)。batch_rows は batch系のみnon-null |
| registration_number | string | No | 判定対象の登録番号(T + 13桁) |
| date | string | No | 判定対象日(YYYY-MM-DD) |
| valid | boolean | No | 対象日での有効性 |
| registration_date | string | Yes | 登録日(YYYY-MM-DD) |
| expire_date | string | Yes | 失効日(YYYY-MM-DD) |
| cancel_date | string | Yes | 取消日(YYYY-MM-DD) |
/v1/companies/search
法人名検索
部分一致(partial)または法人格除去完全一致(exact)で検索します。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| q | query | string | Yes | 検索クエリ(1文字以上200文字以内) |
| mode | query | string | No | partial / exact |
| prefecture_code | query | string | No | 都道府県コード(2桁) |
| limit | query | number | No | 件数(1〜50) |
リクエスト例
curl -G -H 'x-api-key: YOUR_API_KEY' \ --data-urlencode 'q=トヨタ自動車' \ --data-urlencode 'mode=partial' \ --data-urlencode 'limit=2' \ 'https://api.bango-api.jp/v1/companies/search'
レスポンス例
{
"object": "list",
"item": "company_summary",
"schema_version": "2026-08",
"data": [
{
"object": "company_summary",
"corporate_number": "1180301018771",
"name": "トヨタ自動車株式会社",
"name_kana": "トヨタジドウシャ",
"prefecture_code": "23",
"city_code": "23211",
"score": 0.857143
},
{
"object": "company_summary",
"corporate_number": "1430005009042",
"name": "トヨタ自動車北海道労働組合",
"name_kana": "トヨタジドウシャホッカイドウ",
"prefecture_code": "01",
"city_code": "01213",
"score": 0.857143
}
],
"has_more": true,
"offset": 0,
"limit": 2,
"facets": null,
"links": {
"self": "https://api.bango-api.jp/v1/companies/search?q=...",
"docs": "https://bango-api.jp/docs",
"next": "https://api.bango-api.jp/v1/companies/search?q=...&limit=2&offset=2"
},
"meta": {
"source": { "name": "nta", "updated_at": null },
"rate_limit": {
"unlimited": false,
"limit": 6000,
"remaining": 598,
"reset": "2026-01-15T00:01:00Z"
},
"quota": {
"api_requests": { "unlimited": false, "limit": 10000, "remaining": 9876 },
"batch_rows": null
}
}
}レスポンス項目
| field | type | nullable | description |
|---|---|---|---|
| object | string | No | 一覧エンベロープ種別(list 固定) |
| item | string | No | data 配列要素のオブジェクト種別(例: company_summary / batch_result_row)。各要素の object も同値 |
| schema_version | string | No | 現行構造の最終変更年月(YYYY-MM・情報提供専用) |
| data | array | No | 一致した要素の配列。以降のフィールドは各要素(item)の構造 |
| has_more | boolean | No | 続きの実在を示す。offset+limit が上限に達した場合 links.next はnull(打ち切り) |
| offset | number | No | 取得開始位置(0起点) |
| limit | number | No | 取得件数上限 |
| links | object | No | self/docs は常設、next は最終ページ/打ち切り時はnull |
| meta | object | No | source(一覧では updated_at=null)・rate_limit・quota。batch_rows は batch系のみnon-null |
| facets | object | Yes | facetsパラメータ指定時のみnon-null(軸名→{value,count}[])。それ以外はnull |
| corporate_number | string | No | 候補企業の法人番号 |
| name | string | No | 候補企業の名称 |
| name_kana | string | Yes | 候補企業の名称カナ |
| prefecture_code | string | Yes | 都道府県コード(2桁) |
| city_code | string | Yes | 市区町村コード |
| score | number | No | 検索順位付けに使う相対スコア(0〜1)。正解確率・信頼度ではなく、mode=partial では接頭辞一致などで複数候補が同値になりうる。 |
/v1/batch/match
バッチ名寄せ受付
企業名リストを投稿して非同期ジョブを作成します。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| companies | body | string[] | Yes | 企業名配列(最大1,000件) |
リクエスト例
curl -X POST -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \
-d '{"companies":["株式会社サンプル","合同会社サンプル"]}' \
'https://api.bango-api.jp/v1/batch/match'レスポンス例
{
"object": "batch_job",
"schema_version": "2026-08",
"data": {
"job_id": "batch_abc123",
"status": "queued"
},
"links": {
"self": "https://api.bango-api.jp/v1/batch/match",
"docs": "https://bango-api.jp/docs",
"status": "https://api.bango-api.jp/v1/batch/batch_abc123"
},
"meta": {
"source": { "name": "nta", "updated_at": null },
"rate_limit": {
"unlimited": false,
"limit": 6000,
"remaining": 598,
"reset": "2026-01-15T00:01:00Z"
},
"quota": {
"api_requests": { "unlimited": false, "limit": 10000, "remaining": 9876 },
"batch_rows": { "unlimited": false, "limit": 10000, "remaining": 9000 }
}
}
}レスポンス項目
| field | type | nullable | description |
|---|---|---|---|
| object | string | No | オブジェクト種別(例: company / invoice_issuer / batch_job) |
| schema_version | string | No | 現行構造の最終変更年月(YYYY-MM・情報提供専用) |
| data | object | No | レスポンス本体。以降のフィールドは data 内側の構造 |
| links | object | No | 関連リンク。self/docs は常設、関連キー(invoice/company/next 等)はエンドポイント別で値なしはnull |
| meta | object | No | source(NTA更新日)・rate_limit・quota(api_requests/batch_rows)。batch_rows は batch系のみnon-null |
| job_id | string | No | 作成されたバッチジョブID |
| status | string | No | 初期状態(queued) |
/v1/batch/{job_id}
バッチ進捗取得
job_id の進捗と結果を取得します。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| job_id | path | string | Yes | バッチジョブID |
リクエスト例
curl -H 'x-api-key: YOUR_API_KEY' \ 'https://api.bango-api.jp/v1/batch/job_00000000-0000-4000-8000-000000000000'
レスポンス例
{
"object": "batch_job",
"schema_version": "2026-08",
"data": {
"job_id": "batch_abc123",
"status": "processing",
"progress": { "done": 450, "total": 1000 }
},
"links": {
"self": "https://api.bango-api.jp/v1/batch/batch_abc123",
"docs": "https://bango-api.jp/docs",
"download": null
},
"meta": {
"source": { "name": "nta", "updated_at": null },
"rate_limit": {
"unlimited": false,
"limit": 6000,
"remaining": 598,
"reset": "2026-01-15T00:01:00Z"
},
"quota": {
"api_requests": { "unlimited": false, "limit": 10000, "remaining": 9876 },
"batch_rows": { "unlimited": false, "limit": 10000, "remaining": 9000 }
}
}
}レスポンス項目
| field | type | nullable | description |
|---|---|---|---|
| object | string | No | オブジェクト種別(例: company / invoice_issuer / batch_job) |
| schema_version | string | No | 現行構造の最終変更年月(YYYY-MM・情報提供専用) |
| data | object | No | レスポンス本体。以降のフィールドは data 内側の構造 |
| links | object | No | 関連リンク。self/docs は常設、関連キー(invoice/company/next 等)はエンドポイント別で値なしはnull |
| meta | object | No | source(NTA更新日)・rate_limit・quota(api_requests/batch_rows)。batch_rows は batch系のみnon-null |
| job_id | string | No | 対象バッチジョブID |
| status | string | No | ジョブ状態(queued / processing / completed / failed) |
| progress.done | number | Yes | 処理済み件数 |
| progress.total | number | Yes | 総件数 |
| summary.confident | number | Yes | confident 判定件数(completed時) |
| summary.review | number | Yes | review 判定件数(completed時) |
| summary.unmatched | number | Yes | unmatched 判定件数(completed時) |
/v1/batch/{job_id}/download
バッチ結果ダウンロード
完了済みジョブの結果を json または csv で取得します。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| job_id | path | string | Yes | バッチジョブID |
| format | query | string | No | json / csv |
リクエスト例
curl -G -H 'x-api-key: YOUR_API_KEY' \ --data-urlencode 'format=csv' \ 'https://api.bango-api.jp/v1/batch/job_00000000-0000-4000-8000-000000000000/download'
レスポンス例
{
"object": "list",
"item": "batch_result_row",
"schema_version": "2026-08",
"data": [
{
"object": "batch_result_row",
"row_index": 1,
"input_name": "株式会社サンプル",
"prefecture_code": "13",
"confidence": "confident",
"score": 0.97,
"candidate_count": 1,
"matched_corporate_number": "1234567890123",
"candidates": [
{
"corporate_number": "1234567890123",
"name": "株式会社サンプル",
"name_kana": "カブシキガイシャサンプル",
"score": 0.97
}
]
}
],
"has_more": false,
"offset": 0,
"limit": 10,
"links": {
"self": "https://api.bango-api.jp/v1/batch/batch_abc123/download",
"docs": "https://bango-api.jp/docs"
},
"meta": {
"source": { "name": "nta", "updated_at": null },
"rate_limit": {
"unlimited": false,
"limit": 6000,
"remaining": 598,
"reset": "2026-01-15T00:01:00Z"
},
"quota": {
"api_requests": { "unlimited": false, "limit": 10000, "remaining": 9876 },
"batch_rows": { "unlimited": false, "limit": 10000, "remaining": 9000 }
}
}
}レスポンス項目
| field | type | nullable | description |
|---|---|---|---|
| object | string | No | 一覧エンベロープ種別(list 固定) |
| item | string | No | data 配列要素のオブジェクト種別(例: company_summary / batch_result_row)。各要素の object も同値 |
| schema_version | string | No | 現行構造の最終変更年月(YYYY-MM・情報提供専用) |
| data | array | No | 一致した要素の配列。以降のフィールドは各要素(item)の構造 |
| has_more | boolean | No | 続きの実在を示す。offset+limit が上限に達した場合 links.next はnull(打ち切り) |
| offset | number | No | 取得開始位置(0起点) |
| limit | number | No | 取得件数上限 |
| links | object | No | self/docs は常設、next は最終ページ/打ち切り時はnull |
| meta | object | No | source(一覧では updated_at=null)・rate_limit・quota。batch_rows は batch系のみnon-null |
| row_index | number | No | 入力行番号(0起点または1起点) |
| input_name | string | No | 入力した企業名 |
| prefecture_code | string | Yes | 入力から抽出した都道府県コード(任意) |
| confidence | string | No | 判定区分(confident / review / unmatched) |
| score | number | No | 最良候補の一致スコア(0〜1) |
| candidate_count | number | No | 候補件数 |
| matched_corporate_number | string | Yes | 確定した法人番号(未確定時はnull) |
| candidates[].corporate_number | string | No | 候補の法人番号 |
| candidates[].name | string | No | 候補の名称 |
| candidates[].name_kana | string | Yes | 候補の名称カナ |
| candidates[].score | number | No | 候補の一致スコア(0〜1) |
変更監視 Data plane
APIキーで呼ぶ、監視対象(watch)の登録・停止と変更イベントの取得です。自社のシステムから直接組み込みます。
PUT/v1/watch-targets/{identifier}
監視開始(冪等)
x-api-key監視を開始し、現在snapshotをbaselineとして返す(request bodyなし)。既にactiveならstarted_atを維持した同じperiodを返し、停止後の再開は新periodを作る。予約済みdowngradeの発効後に枠を超える場合はcapacity_warningを返す(拒否はしない)。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| identifier | path | string | Yes | 法人番号(13桁)または登録番号(T+13桁)。構文外は400 |
リクエスト例
curl -X PUT -H 'x-api-key: YOUR_API_KEY' \ 'https://api.bango-api.jp/v1/watch-targets/YOUR_IDENTIFIER'
レスポンス例(200)
監視中の現在状態
個人事業者(T番号のみ)の監視開始
{
"capacity_warning": null,
"current": {
"as_of": "2026-09-15T00:00:00Z",
"company": null,
"invoice": {
"active": null,
"address": null,
"address_inside": null,
"address_outside": null,
"address_request": null,
"assignment_date": null,
"closure": null,
"corporate_number": null,
"country": "domestic",
"invoice": {
"cancel_date": null,
"country": "domestic",
"expire_date": null,
"found": true,
"registered": true,
"registration_date": "2026-01-01",
"registration_number": "T6810924593403",
"valid": true
},
"kind": "individual",
"name": null,
"name_en": null,
"name_kana": null,
"popular_name": null,
"revision": null,
"trade_name": null,
"updated_at": null
}
},
"id": "wt_71a2b094-762e-4c90-8da7-2defbff4bcb6",
"object": "watch_target",
"started_at": "2026-09-15T00:00:00Z",
"status": "active",
"stop_reason": null,
"stopped_at": null,
"subject": {
"id": "sub_ef7af6a2-e24a-4cf7-9857-33057aab4a8e",
"kind": "individual",
"version": "6"
}
}エラー(statusとProblem code)
| status | code | description |
|---|---|---|
| 400 | VALIDATION_ERROR | identifier書式不正(VALIDATION_ERROR) |
| 401 | UNAUTHORIZED | APIキー未指定・不正(UNAUTHORIZED)。X-RateLimit-*/X-Quota-*は送出しない |
| 403 | FORBIDDEN | 閉鎖済みorganization(FORBIDDEN) |
| 404 | NOT_FOUND | 公開データにsubjectが存在しない(NOT_FOUND) |
| 409 | RESOURCE_LIMIT_EXCEEDED | active監視数の上限超過(RESOURCE_LIMIT_EXCEEDED。resource_limit.resource=watch_targets、limit/currentに上限と現在数) |
| 429 | QUOTA_EXCEEDED / RATE_LIMIT_EXCEEDED | レート制限・クォータ超過(RATE_LIMIT_EXCEEDED / QUOTA_EXCEEDED) |
| 503 | DEPENDENCY_UNAVAILABLE | 依存障害(DEPENDENCY_UNAVAILABLE) |
各codeの意味と回復手順は エラーリファレンス を参照します。
GET/v1/watch-targets/{identifier}
監視対象の現在状態取得
x-api-key最新のwatch periodと現在snapshot(company/invoice全体)を返す。停止後も最新periodを返す。応答はエンベロープではなくwatch_target本体(links/metaなし)。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| identifier | path | string | Yes | 法人番号(13桁)または登録番号(T+13桁)。構文外は400 |
リクエスト例
curl -H 'x-api-key: YOUR_API_KEY' \ 'https://api.bango-api.jp/v1/watch-targets/YOUR_IDENTIFIER'
レスポンス例(200)
監視対象の現在状態
監視中の法人(現在snapshot全体)
{
"capacity_warning": null,
"current": {
"as_of": "2026-10-01T03:00:00Z",
"company": {
"active": true,
"address": {
"city": "豊田市",
"city_code": "23211",
"city_en": null,
"full": "愛知県豊田市トヨタ町1番地",
"image_id": null,
"post_code": "4710826",
"prefecture": "愛知県",
"prefecture_code": "23",
"prefecture_en": null,
"street": "トヨタ町1番地"
},
"address_outside": null,
"assignment_date": "2015-10-05",
"closure": null,
"corporate_number": "1180301018771",
"invoice": {
"cancel_date": null,
"country": "domestic",
"expire_date": null,
"found": true,
"registered": true,
"registration_date": "2023-10-01",
"registration_number": "T1180301018771",
"valid": true
},
"kind": "株式会社",
"kind_code": "301",
"name": "トヨタ自動車株式会社",
"name_en": null,
"name_image_id": null,
"name_kana": "トヨタジドウシャ",
"revision": {
"change_cause": null,
"change_date": null,
"correct": null,
"latest": null,
"process": null,
"published_date": null,
"sequence_number": null
},
"search_excluded": null,
"updated_at": "2026-09-30"
},
"invoice": {
"active": true,
"address": {
"city": "豊田市",
"city_code": "23211",
"city_en": null,
"full": "愛知県豊田市トヨタ町1番地",
"image_id": null,
"post_code": "4710826",
"prefecture": "愛知県",
"prefecture_code": "23",
"prefecture_en": null,
"street": "トヨタ町1番地"
},
"address_inside": null,
"address_outside": null,
"address_request": null,
"assignment_date": "2015-10-05",
"closure": null,
"corporate_number": "1180301018771",
"country": "domestic",
"invoice": {
"cancel_date": null,
"country": "domestic",
"expire_date": null,
"found": true,
"registered": true,
"registration_date": "2023-10-01",
"registration_number": "T1180301018771",
"valid": true
},
"kind": "corporation",
"name": "トヨタ自動車株式会社",
"name_en": null,
"name_kana": "トヨタジドウシャ",
"popular_name": null,
"revision": null,
"trade_name": null,
"updated_at": "2021-10-28"
}
},
"id": "wt_1533d05a-c51c-4b31-b1da-b47286894586",
"object": "watch_target",
"started_at": "2026-09-01T00:00:00Z",
"status": "active",
"stop_reason": null,
"stopped_at": null,
"subject": {
"id": "sub_ee7b4514-902a-4c38-867f-3fd740e23489",
"kind": "corporation",
"version": "43"
}
}エラー(statusとProblem code)
| status | code | description |
|---|---|---|
| 400 | VALIDATION_ERROR | identifier書式不正(VALIDATION_ERROR) |
| 401 | UNAUTHORIZED | APIキー未指定・不正(UNAUTHORIZED)。X-RateLimit-*/X-Quota-*は送出しない |
| 403 | FORBIDDEN | 閉鎖済みorganization(FORBIDDEN) |
| 404 | NOT_FOUND | 一度も監視していない(NOT_FOUND) |
| 429 | QUOTA_EXCEEDED / RATE_LIMIT_EXCEEDED | レート制限・クォータ超過(RATE_LIMIT_EXCEEDED / QUOTA_EXCEEDED) |
| 503 | DEPENDENCY_UNAVAILABLE | 依存障害(DEPENDENCY_UNAVAILABLE) |
各codeの意味と回復手順は エラーリファレンス を参照します。
DELETE/v1/watch-targets/{identifier}
監視停止(冪等)
x-api-key監視を停止し、最新のstopped periodを200で返す(204ではない)。停止済みへの再実行はperiodを増やさず同じ結果を返す。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| identifier | path | string | Yes | 法人番号(13桁)または登録番号(T+13桁)。構文外は400 |
リクエスト例
curl -X DELETE -H 'x-api-key: YOUR_API_KEY' \ 'https://api.bango-api.jp/v1/watch-targets/YOUR_IDENTIFIER'
レスポンス例(200)
停止後の最新period
停止後の最新period(法人ブロック削除済み・invoiceは存続)
{
"capacity_warning": null,
"current": {
"as_of": "2026-10-05T00:00:00Z",
"company": null,
"invoice": {
"active": true,
"address": {
"city": "豊田市",
"city_code": "23211",
"city_en": null,
"full": "愛知県豊田市トヨタ町1番地",
"image_id": null,
"post_code": "4710826",
"prefecture": "愛知県",
"prefecture_code": "23",
"prefecture_en": null,
"street": "トヨタ町1番地"
},
"address_inside": null,
"address_outside": null,
"address_request": null,
"assignment_date": "2015-10-05",
"closure": null,
"corporate_number": "1180301018771",
"country": "domestic",
"invoice": {
"cancel_date": null,
"country": "domestic",
"expire_date": null,
"found": true,
"registered": true,
"registration_date": "2023-10-01",
"registration_number": "T1180301018771",
"valid": true
},
"kind": "corporation",
"name": "トヨタ自動車株式会社",
"name_en": null,
"name_kana": "トヨタジドウシャ",
"popular_name": null,
"revision": null,
"trade_name": null,
"updated_at": "2021-10-28"
}
},
"id": "wt_1533d05a-c51c-4b31-b1da-b47286894586",
"object": "watch_target",
"started_at": "2026-09-01T00:00:00Z",
"status": "stopped",
"stop_reason": "user_requested",
"stopped_at": "2026-10-05T00:00:00Z",
"subject": {
"id": "sub_ee7b4514-902a-4c38-867f-3fd740e23489",
"kind": "corporation",
"version": "44"
}
}エラー(statusとProblem code)
| status | code | description |
|---|---|---|
| 400 | VALIDATION_ERROR | identifier書式不正(VALIDATION_ERROR) |
| 401 | UNAUTHORIZED | APIキー未指定・不正(UNAUTHORIZED)。X-RateLimit-*/X-Quota-*は送出しない |
| 403 | FORBIDDEN | 閉鎖済みorganization(FORBIDDEN) |
| 404 | NOT_FOUND | 一度も監視していない(NOT_FOUND) |
| 429 | QUOTA_EXCEEDED / RATE_LIMIT_EXCEEDED | レート制限・クォータ超過(RATE_LIMIT_EXCEEDED / QUOTA_EXCEEDED) |
| 503 | DEPENDENCY_UNAVAILABLE | 依存障害(DEPENDENCY_UNAVAILABLE) |
各codeの意味と回復手順は エラーリファレンス を参照します。
GET/v1/watch-targets
監視対象一覧
x-api-key監視対象のsummary一覧を(started_at, id)昇順のkeyset cursorで返す(offsetなし)。続きはnext_cursorをcursorへ渡す。links.nextは続きがある場合のみ非null。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| status | query | string (active | stopped | all) | No | 監視状態で絞り込む。cursor併用時は発行時と同じstatusが必須(不一致は400) |
| limit | query | integer | No | 1ページの件数(1〜100)。先頭ゼロ・符号・小数・指数表記は400 |
| cursor | query | string | No | 前ページのnext_cursor(opaque・署名付き)。組織とstatusに束縛され、改竄・他組織/別statusへの流用は400 |
リクエスト例
curl -H 'x-api-key: YOUR_API_KEY' \ 'https://api.bango-api.jp/v1/watch-targets'
レスポンス例(200)
監視対象summary一覧
最終ページ(該当なし・has_more=false)
{
"data": [],
"has_more": false,
"item": "watch_target",
"limit": 2,
"links": {
"docs": "https://bango-api.jp/docs#watch_targets_list",
"next": null,
"self": "https://api.bango-api.jp/v1/watch-targets?limit=2&cursor=wl1.d2F0Y2hlcw.c2ln"
},
"meta": {
"quota": {
"api_requests": {
"limit": 60000,
"remaining": 59987,
"unlimited": false
},
"batch_rows": null
},
"rate_limit": {
"limit": 6000,
"remaining": 599,
"reset": "2026-05-14T02:31:00Z",
"unlimited": false
},
"source": {
"name": "nta",
"updated_at": null
}
},
"next_cursor": "wl1.ZW5k.c2ln",
"object": "list",
"schema_version": "2026-08"
}続きがあるページ(next_cursorで継続)
{
"data": [
{
"id": "wt_1533d05a-c51c-4b31-b1da-b47286894586",
"identifier": "1180301018771",
"started_at": "2026-09-01T00:00:00Z",
"status": "active",
"stop_reason": null,
"stopped_at": null,
"subject": {
"id": "sub_ee7b4514-902a-4c38-867f-3fd740e23489",
"kind": "corporation"
}
},
{
"id": "wt_71a2b094-762e-4c90-8da7-2defbff4bcb6",
"identifier": "T6810924593403",
"started_at": "2026-09-15T00:00:00Z",
"status": "active",
"stop_reason": null,
"stopped_at": null,
"subject": {
"id": "sub_ef7af6a2-e24a-4cf7-9857-33057aab4a8e",
"kind": "individual"
}
}
],
"has_more": true,
"item": "watch_target",
"limit": 2,
"links": {
"docs": "https://bango-api.jp/docs#watch_targets_list",
"next": "https://api.bango-api.jp/v1/watch-targets?limit=2&cursor=wl1.d2F0Y2hlcw.c2ln",
"self": "https://api.bango-api.jp/v1/watch-targets?limit=2"
},
"meta": {
"quota": {
"api_requests": {
"limit": 60000,
"remaining": 59987,
"unlimited": false
},
"batch_rows": null
},
"rate_limit": {
"limit": 6000,
"remaining": 599,
"reset": "2026-05-14T02:31:00Z",
"unlimited": false
},
"source": {
"name": "nta",
"updated_at": null
}
},
"next_cursor": "wl1.d2F0Y2hlcw.c2ln",
"object": "list",
"schema_version": "2026-08"
}エラー(statusとProblem code)
| status | code | description |
|---|---|---|
| 400 | VALIDATION_ERROR | query不正(VALIDATION_ERROR。status/limit書式・cursor改竄・他組織cursor・status不一致) |
| 401 | UNAUTHORIZED | APIキー未指定・不正(UNAUTHORIZED)。X-RateLimit-*/X-Quota-*は送出しない |
| 403 | FORBIDDEN | 閉鎖済みorganization(FORBIDDEN) |
| 429 | QUOTA_EXCEEDED / RATE_LIMIT_EXCEEDED | レート制限・クォータ超過(RATE_LIMIT_EXCEEDED / QUOTA_EXCEEDED) |
| 503 | DEPENDENCY_UNAVAILABLE | 依存障害(DEPENDENCY_UNAVAILABLE) |
各codeの意味と回復手順は エラーリファレンス を参照します。
GET/v1/change-events
変更イベント一覧(history / incremental)
x-api-keyhistory=保持中履歴のbest-effort列挙(continuity_guaranteed=false・next_after=null。欠落なしは保証しない)。historyは初回リクエスト時点のstream末尾(head)を固定し、続きのページも同じheadまでを返す。列挙開始後に公開されたeventは含まれないため、取得するには新しく一覧を開始する。historyの最終ページはhas_more=falseでもnext_cursorは非null(再利用しても固定headより先は返さず、incrementalのcheckpointにはならない)。
incremental=指定checkpointからの欠落検知付き差分回収(continuity_guaranteed=true。欠落検知は410 CHANGE_EVENT_HISTORY_GAP)。最終ページ・空ページでもnext_cursorは走査済み位置へ進み、次回はそこから再開する。
開始・継続指定(cursor / after / start は相互排他。2つ以上の指定は400):
- 指定なし(mode省略またはhistory): historyを先頭から開始
- start=now(mode省略またはincremental): 現在末尾のincremental checkpointだけを返す
- after=evt_ID(mode省略またはincremental): 自組織eventの位置からincrementalを開始
- cursor: cursor内部のmodeを継続(mode併記は一致必須。暗黙に変換しない)
- mode=incrementalのみ/mode=historyとafter・startの併用: 400 VALIDATION_ERROR
cursorは組織・mode・位置・watch_target_id絞り込みに束縛され、改竄や流用は400(先頭へ黙って戻さない)。回収済みcheckpointとして保存するのはincrementalのnext_cursorだけ。両モードともstream sequenceの昇順。historyではorder省略またはascを受け付け、初回・history cursorでの継続とも同じ順序で返す。incrementalではorderを省略する(start=now・after・incremental cursorとの併用はascを含め指定すると400 VALIDATION_ERROR)。modeを省略した場合も同じ制約が適用される。orderのdesc・不正値は両モードとも400。order=descはdashboard専用で受け付けない(dashboard履歴のdesc cursorも400)。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| order | query | string (asc) | No | history専用。ascのみ指定可(省略時もstream sequenceの昇順)。incrementalではorderを省略する(start=now・after・incremental cursorとの併用はascを含め指定すると400)。desc・不正値も400 VALIDATION_ERROR |
| mode | query | string (history | incremental) | No | 取得モード。省略時は開始指定から解決する(指定なし=history、after/start=now=incremental、cursor=cursor内部のmode)。cursorと併記する場合は一致必須 |
| cursor | query | string | No | 前ページのnext_cursor(opaque・署名付き)。cursor / after / start は相互排他。cursor内部のmodeを継続し、組織・watch_target_id絞り込み・modeに束縛される(改竄・流用・mode不一致は400) |
| after | query | string | No | この自組織eventの直後からincrementalを開始する。cursor / after / start は相互排他。mode=historyとの併用は400、失効中は410 CHANGE_EVENT_EXPIRED、他組織・不存在は404 |
| start | query | string (now) | No | nowのみ。現在末尾のincremental checkpointから購読を開始する。cursor / after / start は相互排他。mode=historyとの併用は400 |
| limit | query | integer | No | 1ページの件数(1〜100)。先頭ゼロ・符号・小数・指数表記は400 |
| watch_target_id | query | string | No | 監視対象(wt_ ID)で絞り込む。存在・所有は検証せず、該当なしは空ページ。incrementalの欠落判定は絞り込みに関わらず組織全体で行う |
リクエスト例
curl -H 'x-api-key: YOUR_API_KEY' \ 'https://api.bango-api.jp/v1/change-events'
レスポンス例(200)
変更イベント一覧
新着なしのincremental(空でもnext_cursorは走査済み位置へ進む)
{
"continuity_guaranteed": true,
"data": [],
"has_more": false,
"item": "change_event",
"limit": 100,
"links": {
"docs": "https://bango-api.jp/docs#change_events_list",
"next": null,
"self": "https://api.bango-api.jp/v1/change-events?cursor=cm1.aW5jcmVtZW50YWw.c2ln"
},
"meta": {
"quota": {
"api_requests": {
"limit": 60000,
"remaining": 59987,
"unlimited": false
},
"batch_rows": null
},
"rate_limit": {
"limit": 6000,
"remaining": 599,
"reset": "2026-05-14T02:31:00Z",
"unlimited": false
},
"source": {
"name": "nta",
"updated_at": null
}
},
"mode": "incremental",
"next_after": null,
"next_cursor": "cm1.ZW1wdHk.c2ln",
"object": "list",
"schema_version": "2026-08"
}history(保持中履歴のbest-effort列挙。continuity_guaranteed=false・next_after=null)
{
"continuity_guaranteed": false,
"data": [
{
"data": {
"changes": [
{
"current": "4710826",
"path": "/company/address/post_code",
"previous": "4718571"
}
],
"current": {
"company": {
"active": true,
"address": {
"city": "豊田市",
"city_code": "23211",
"city_en": null,
"full": "愛知県豊田市トヨタ町1番地",
"image_id": null,
"post_code": "4710826",
"prefecture": "愛知県",
"prefecture_code": "23",
"prefecture_en": null,
"street": "トヨタ町1番地"
},
"address_outside": null,
"assignment_date": "2015-10-05",
"closure": null,
"corporate_number": "1180301018771",
"invoice": {
"cancel_date": null,
"country": "domestic",
"expire_date": null,
"found": true,
"registered": true,
"registration_date": "2023-10-01",
"registration_number": "T1180301018771",
"valid": true
},
"kind": "株式会社",
"kind_code": "301",
"name": "トヨタ自動車株式会社",
"name_en": null,
"name_image_id": null,
"name_kana": "トヨタジドウシャ",
"revision": {
"change_cause": null,
"change_date": null,
"correct": null,
"latest": null,
"process": null,
"published_date": null,
"sequence_number": null
},
"search_excluded": null,
"updated_at": "2026-09-30"
},
"invoice": {
"active": true,
"address": {
"city": "豊田市",
"city_code": "23211",
"city_en": null,
"full": "愛知県豊田市トヨタ町1番地",
"image_id": null,
"post_code": "4710826",
"prefecture": "愛知県",
"prefecture_code": "23",
"prefecture_en": null,
"street": "トヨタ町1番地"
},
"address_inside": null,
"address_outside": null,
"address_request": null,
"assignment_date": "2015-10-05",
"closure": null,
"corporate_number": "1180301018771",
"country": "domestic",
"invoice": {
"cancel_date": null,
"country": "domestic",
"expire_date": null,
"found": true,
"registered": true,
"registration_date": "2023-10-01",
"registration_number": "T1180301018771",
"valid": true
},
"kind": "corporation",
"name": "トヨタ自動車株式会社",
"name_en": null,
"name_kana": "トヨタジドウシャ",
"popular_name": null,
"revision": null,
"trade_name": null,
"updated_at": "2021-10-28"
}
},
"previous": null,
"transition": null
},
"detected_at": "2026-09-30T02:00:00Z",
"effective_date": null,
"id": "evt_ddc487b3-8af5-4c1f-b2fe-7d59ba5949da",
"object": "change_event",
"origin": "source_change",
"resource": {
"id": "1180301018771",
"type": "company"
},
"schema_version": "2026-09",
"snapshot_at": "2026-09-30T01:58:00Z",
"source": {
"name": "nta",
"revision": null,
"updated_at": "2026-09-30"
},
"subject": {
"corporate_number": "1180301018771",
"id": "sub_ee7b4514-902a-4c38-867f-3fd740e23489",
"kind": "corporation",
"registration_number": "T1180301018771",
"version": "43"
},
"type": "company.updated"
},
{
"data": {
"changes": [
{
"current": false,
"path": "/invoice/invoice/valid",
"previous": true
}
],
"current": {
"company": null,
"invoice": {
"active": null,
"address": null,
"address_inside": null,
"address_outside": null,
"address_request": null,
"assignment_date": null,
"closure": null,
"corporate_number": null,
"country": "domestic",
"invoice": {
"cancel_date": "2026-10-01",
"country": "domestic",
"expire_date": null,
"found": true,
"registered": true,
"registration_date": "2023-10-01",
"registration_number": "T0123456789012",
"valid": false
},
"kind": "individual",
"name": null,
"name_en": null,
"name_kana": null,
"popular_name": null,
"revision": null,
"trade_name": null,
"updated_at": null
}
},
"previous": null,
"transition": {
"from": true,
"reasons": [
"cancel_date"
],
"to": false
}
},
"detected_at": "2026-10-01T00:05:00Z",
"effective_date": "2026-10-01",
"id": "evt_bf00d209-6170-472a-9b5e-53183ba76d5a",
"object": "change_event",
"origin": "effective_date",
"resource": {
"id": "T0123456789012",
"type": "invoice"
},
"schema_version": "2026-09",
"snapshot_at": "2026-09-30T15:00:00Z",
"source": {
"name": "nta",
"revision": null,
"updated_at": "2026-09-01"
},
"subject": {
"corporate_number": null,
"id": "sub_5d0c8f3e-7a21-4b6e-9f14-c2e8a7b3d615",
"kind": "individual",
"registration_number": "T0123456789012",
"version": "7"
},
"type": "invoice.validity_changed"
}
],
"has_more": true,
"item": "change_event",
"limit": 2,
"links": {
"docs": "https://bango-api.jp/docs#change_events_list",
"next": "https://api.bango-api.jp/v1/change-events?limit=2&cursor=cm1.aGlzdG9yeQ.c2ln",
"self": "https://api.bango-api.jp/v1/change-events?limit=2"
},
"meta": {
"quota": {
"api_requests": {
"limit": 60000,
"remaining": 59987,
"unlimited": false
},
"batch_rows": null
},
"rate_limit": {
"limit": 6000,
"remaining": 599,
"reset": "2026-05-14T02:31:00Z",
"unlimited": false
},
"source": {
"name": "nta",
"updated_at": null
}
},
"mode": "history",
"next_after": null,
"next_cursor": "cm1.aGlzdG9yeQ.c2ln",
"object": "list",
"schema_version": "2026-08"
}incremental(checkpointからの連続性保証。next_after=返却末尾event)
{
"continuity_guaranteed": true,
"data": [
{
"data": {
"changes": [
{
"current": null,
"path": "/company",
"previous": {
"active": true,
"address": {
"city": "豊田市",
"city_code": "23211",
"city_en": null,
"full": "愛知県豊田市トヨタ町1番地",
"image_id": null,
"post_code": "4710826",
"prefecture": "愛知県",
"prefecture_code": "23",
"prefecture_en": null,
"street": "トヨタ町1番地"
},
"address_outside": null,
"assignment_date": "2015-10-05",
"closure": null,
"corporate_number": "1180301018771",
"invoice": {
"cancel_date": null,
"country": "domestic",
"expire_date": null,
"found": true,
"registered": true,
"registration_date": "2023-10-01",
"registration_number": "T1180301018771",
"valid": true
},
"kind": "株式会社",
"kind_code": "301",
"name": "トヨタ自動車株式会社",
"name_en": null,
"name_image_id": null,
"name_kana": "トヨタジドウシャ",
"revision": {
"change_cause": null,
"change_date": null,
"correct": null,
"latest": null,
"process": null,
"published_date": null,
"sequence_number": null
},
"search_excluded": null,
"updated_at": "2026-09-30"
}
}
],
"current": {
"company": null,
"invoice": {
"active": true,
"address": {
"city": "豊田市",
"city_code": "23211",
"city_en": null,
"full": "愛知県豊田市トヨタ町1番地",
"image_id": null,
"post_code": "4710826",
"prefecture": "愛知県",
"prefecture_code": "23",
"prefecture_en": null,
"street": "トヨタ町1番地"
},
"address_inside": null,
"address_outside": null,
"address_request": null,
"assignment_date": "2015-10-05",
"closure": null,
"corporate_number": "1180301018771",
"country": "domestic",
"invoice": {
"cancel_date": null,
"country": "domestic",
"expire_date": null,
"found": true,
"registered": true,
"registration_date": "2023-10-01",
"registration_number": "T1180301018771",
"valid": true
},
"kind": "corporation",
"name": "トヨタ自動車株式会社",
"name_en": null,
"name_kana": "トヨタジドウシャ",
"popular_name": null,
"revision": null,
"trade_name": null,
"updated_at": "2021-10-28"
}
},
"previous": {
"company": {
"active": true,
"address": {
"city": "豊田市",
"city_code": "23211",
"city_en": null,
"full": "愛知県豊田市トヨタ町1番地",
"image_id": null,
"post_code": "4710826",
"prefecture": "愛知県",
"prefecture_code": "23",
"prefecture_en": null,
"street": "トヨタ町1番地"
},
"address_outside": null,
"assignment_date": "2015-10-05",
"closure": null,
"corporate_number": "1180301018771",
"invoice": {
"cancel_date": null,
"country": "domestic",
"expire_date": null,
"found": true,
"registered": true,
"registration_date": "2023-10-01",
"registration_number": "T1180301018771",
"valid": true
},
"kind": "株式会社",
"kind_code": "301",
"name": "トヨタ自動車株式会社",
"name_en": null,
"name_image_id": null,
"name_kana": "トヨタジドウシャ",
"revision": {
"change_cause": null,
"change_date": null,
"correct": null,
"latest": null,
"process": null,
"published_date": null,
"sequence_number": null
},
"search_excluded": null,
"updated_at": "2026-09-30"
},
"invoice": {
"active": true,
"address": {
"city": "豊田市",
"city_code": "23211",
"city_en": null,
"full": "愛知県豊田市トヨタ町1番地",
"image_id": null,
"post_code": "4710826",
"prefecture": "愛知県",
"prefecture_code": "23",
"prefecture_en": null,
"street": "トヨタ町1番地"
},
"address_inside": null,
"address_outside": null,
"address_request": null,
"assignment_date": "2015-10-05",
"closure": null,
"corporate_number": "1180301018771",
"country": "domestic",
"invoice": {
"cancel_date": null,
"country": "domestic",
"expire_date": null,
"found": true,
"registered": true,
"registration_date": "2023-10-01",
"registration_number": "T1180301018771",
"valid": true
},
"kind": "corporation",
"name": "トヨタ自動車株式会社",
"name_en": null,
"name_kana": "トヨタジドウシャ",
"popular_name": null,
"revision": null,
"trade_name": null,
"updated_at": "2021-10-28"
}
},
"transition": null
},
"detected_at": "2026-10-02T02:00:00Z",
"effective_date": null,
"id": "evt_a0be2cc0-0ab2-4b1b-95de-1094ce08d7d7",
"object": "change_event",
"origin": "source_change",
"resource": {
"id": "1180301018771",
"type": "company"
},
"schema_version": "2026-09",
"snapshot_at": "2026-10-02T01:58:00Z",
"source": {
"name": "nta",
"revision": null,
"updated_at": "2026-10-02"
},
"subject": {
"corporate_number": "1180301018771",
"id": "sub_ee7b4514-902a-4c38-867f-3fd740e23489",
"kind": "corporation",
"registration_number": "T1180301018771",
"version": "44"
},
"type": "company.deleted"
}
],
"has_more": false,
"item": "change_event",
"limit": 100,
"links": {
"docs": "https://bango-api.jp/docs#change_events_list",
"next": null,
"self": "https://api.bango-api.jp/v1/change-events?cursor=cm1.c3RhcnQ.c2ln"
},
"meta": {
"quota": {
"api_requests": {
"limit": 60000,
"remaining": 59987,
"unlimited": false
},
"batch_rows": null
},
"rate_limit": {
"limit": 6000,
"remaining": 599,
"reset": "2026-05-14T02:31:00Z",
"unlimited": false
},
"source": {
"name": "nta",
"updated_at": null
}
},
"mode": "incremental",
"next_after": "evt_a0be2cc0-0ab2-4b1b-95de-1094ce08d7d7",
"next_cursor": "cm1.aW5jcmVtZW50YWw.c2ln",
"object": "list",
"schema_version": "2026-08"
}エラー(statusとProblem code)
| status | code | description |
|---|---|---|
| 400 | VALIDATION_ERROR | query不正(VALIDATION_ERROR。排他違反・mode不一致・cursor改竄/流用・書式・orderのdesc・不正値・history以外のorder指定(ascを含む)) |
| 401 | UNAUTHORIZED | APIキー未指定・不正(UNAUTHORIZED)。X-RateLimit-*/X-Quota-*は送出しない |
| 403 | FORBIDDEN | 閉鎖済みorganization(FORBIDDEN) |
| 404 | NOT_FOUND | afterのeventが自組織に存在しない(NOT_FOUND) |
| 410 | CHANGE_EVENT_EXPIRED / CHANGE_EVENT_HISTORY_GAP | afterのevent失効(CHANGE_EVENT_EXPIRED)・incrementalの欠落検知(CHANGE_EVENT_HISTORY_GAP) |
| 429 | QUOTA_EXCEEDED / RATE_LIMIT_EXCEEDED | レート制限・クォータ超過(RATE_LIMIT_EXCEEDED / QUOTA_EXCEEDED) |
| 503 | DEPENDENCY_UNAVAILABLE | 依存障害(DEPENDENCY_UNAVAILABLE) |
各codeの意味と回復手順は エラーリファレンス を参照します。
GET/v1/change-events/{event_id}
変更イベント取得
x-api-key自組織の変更イベントを1件返す。dataは保存時のevent本体で、event側のschema_versionはRESTエンベロープのschema_versionと独立。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| event_id | path | string | Yes | 変更イベントID(evt_)。書式不正は400 |
リクエスト例
curl -H 'x-api-key: YOUR_API_KEY' \ 'https://api.bango-api.jp/v1/change-events/YOUR_EVENT_ID'
レスポンス例(200)
変更イベント
個人事業者の取消日到来による無効化
{
"data": {
"data": {
"changes": [
{
"current": false,
"path": "/invoice/invoice/valid",
"previous": true
}
],
"current": {
"company": null,
"invoice": {
"active": null,
"address": null,
"address_inside": null,
"address_outside": null,
"address_request": null,
"assignment_date": null,
"closure": null,
"corporate_number": null,
"country": "domestic",
"invoice": {
"cancel_date": "2026-10-01",
"country": "domestic",
"expire_date": null,
"found": true,
"registered": true,
"registration_date": "2023-10-01",
"registration_number": "T0123456789012",
"valid": false
},
"kind": "individual",
"name": null,
"name_en": null,
"name_kana": null,
"popular_name": null,
"revision": null,
"trade_name": null,
"updated_at": null
}
},
"previous": null,
"transition": {
"from": true,
"reasons": [
"cancel_date"
],
"to": false
}
},
"detected_at": "2026-10-01T00:05:00Z",
"effective_date": "2026-10-01",
"id": "evt_bf00d209-6170-472a-9b5e-53183ba76d5a",
"object": "change_event",
"origin": "effective_date",
"resource": {
"id": "T0123456789012",
"type": "invoice"
},
"schema_version": "2026-09",
"snapshot_at": "2026-09-30T15:00:00Z",
"source": {
"name": "nta",
"revision": null,
"updated_at": "2026-09-01"
},
"subject": {
"corporate_number": null,
"id": "sub_5d0c8f3e-7a21-4b6e-9f14-c2e8a7b3d615",
"kind": "individual",
"registration_number": "T0123456789012",
"version": "7"
},
"type": "invoice.validity_changed"
},
"links": {
"docs": "https://bango-api.jp/docs#change_events_get",
"self": "https://api.bango-api.jp/v1/change-events/evt_bf00d209-6170-472a-9b5e-53183ba76d5a"
},
"meta": {
"quota": {
"api_requests": {
"limit": 60000,
"remaining": 59987,
"unlimited": false
},
"batch_rows": null
},
"rate_limit": {
"limit": 6000,
"remaining": 599,
"reset": "2026-05-14T02:31:00Z",
"unlimited": false
},
"source": {
"name": "nta",
"updated_at": null
}
},
"object": "change_event",
"schema_version": "2026-08"
}エラー(statusとProblem code)
| status | code | description |
|---|---|---|
| 400 | VALIDATION_ERROR | event_id書式不正(VALIDATION_ERROR) |
| 401 | UNAUTHORIZED | APIキー未指定・不正(UNAUTHORIZED)。X-RateLimit-*/X-Quota-*は送出しない |
| 403 | FORBIDDEN | 閉鎖済みorganization(FORBIDDEN) |
| 404 | NOT_FOUND | 他組織・不存在(NOT_FOUND) |
| 410 | CHANGE_EVENT_EXPIRED | 保持期限切れ(CHANGE_EVENT_EXPIRED) |
| 429 | QUOTA_EXCEEDED / RATE_LIMIT_EXCEEDED | レート制限・クォータ超過(RATE_LIMIT_EXCEEDED / QUOTA_EXCEEDED) |
| 503 | DEPENDENCY_UNAVAILABLE | 依存障害(DEPENDENCY_UNAVAILABLE) |
各codeの意味と回復手順は エラーリファレンス を参照します。
Webhook Control plane
ログイン利用者のJWTで呼ぶ、Webhook受信先と配送の管理です。変更監視画面の「Webhook」タブも同じ操作を使います。
次の4つは、変更監視画面(Dashboard)が使う閲覧用APIです。ログイン利用者の Authorization: Bearer <JWT> で認証し、月間APIコールを消費しません。仕様は OpenAPI仕様 を参照します。
- GET/v1/change-monitoring/events/{event_id}/deliveries
変更イベントのdelivery一覧(Dashboard)
- GET/v1/change-monitoring/history
変更イベント履歴(Dashboard・history専用)
- GET/v1/change-monitoring/summary
変更監視の利用状況サマリー(Dashboard)
- GET/v1/change-monitoring/watch-targets
監視対象一覧(Dashboard)
GET/v1/webhook-endpoints
webhook endpoint一覧
Bearer JWT組織のendpointを全件返す(paginationなし・metaなし)。secretはsecret_fingerprintのみ。全ロールが閲覧できる。Bearer JWT(Dashboardセッション)で認証し、monthly api_requestsは消費しない。
パラメータ
なし
リクエスト例
curl -H 'Authorization: Bearer <JWT>' \ 'https://api.bango-api.jp/v1/webhook-endpoints'
レスポンス例(200)
endpoint一覧
組織のendpoint全件(paginationなし)
{
"data": [
{
"capacity_warning": null,
"config_revision": 1,
"created_at": "2026-09-20T01:00:00Z",
"disabled_reason": null,
"event_types": [
"company.updated",
"company.closed",
"company.deleted",
"invoice.validity_changed"
],
"health": "healthy",
"id": "whep_df2f4bf1-4dd7-4266-9289-104897f7c993",
"last_failure_at": "2026-10-01T00:06:03Z",
"last_success_at": "2026-09-30T02:00:02Z",
"last_test_succeeded_at": "2026-09-20T01:05:00Z",
"recovery_required": false,
"secret_fingerprint": "whfp_00000000000000a1",
"status": "active",
"updated_at": "2026-09-20T01:05:00Z",
"url": "https://hooks.example.jp/bango/webhooks",
"url_revision": 1
},
{
"capacity_warning": null,
"config_revision": 2,
"created_at": "2026-09-10T00:00:00Z",
"disabled_reason": null,
"event_types": [
"invoice.updated",
"invoice.deleted"
],
"health": null,
"id": "whep_8de5a579-417b-45ce-a690-8c98e88b988f",
"last_failure_at": null,
"last_success_at": null,
"last_test_succeeded_at": null,
"recovery_required": false,
"secret_fingerprint": "whfp_00000000000000b1",
"status": "paused",
"updated_at": "2026-09-12T00:00:00Z",
"url": "https://hooks.example.jp/bango/audit",
"url_revision": 1
}
],
"item": "webhook_endpoint",
"links": {
"docs": "https://bango-api.jp/docs#webhook_endpoints_list",
"self": "https://api.bango-api.jp/v1/webhook-endpoints"
},
"object": "list",
"schema_version": "2026-08"
}エラー(statusとProblem code)
| status | code | description |
|---|---|---|
| 401 | UNAUTHORIZED | Bearer JWT未指定・不正・期限切れ(UNAUTHORIZED) |
| 403 | FORBIDDEN | 削除済みアカウント(JWTが有効期限内でも)・所属organizationを1件に確定できない・閉鎖済みorganization(FORBIDDEN) |
| 429 | RATE_LIMIT_EXCEEDED | Control planeのレート制限超過(RATE_LIMIT_EXCEEDED) |
| 503 | DEPENDENCY_UNAVAILABLE | 依存障害(DEPENDENCY_UNAVAILABLE) |
各codeの意味と回復手順は エラーリファレンス を参照します。
POST/v1/webhook-endpoints
webhook endpoint作成
Bearer JWTurl・event_types(非空・既知enum・重複は除去)を指定しactiveで作成する。201応答のdata.secretが署名secret全文を得る唯一の機会で、以後の取得系はsecret_fingerprintのみ返す。secretを含む応答はキャッシュさせない。owner/adminのみ。Bearer JWT(Dashboardセッション)で認証し、monthly api_requestsは消費しない。
パラメータ
なし
リクエスト例
# data.secret は一度しか返りません。安全な保管先へ保存し、ログや標準出力に出さないでください。
curl -X POST -H 'Authorization: Bearer <JWT>' -H 'Content-Type: application/json' \
-d '{"event_types":["company.updated","company.closed","company.deleted","invoice.validity_changed"],"url":"https://hooks.example.jp/bango/webhooks"}' \
'https://api.bango-api.jp/v1/webhook-endpoints'レスポンス例(201)
作成したendpointと署名secret全文
作成直後(secret全文はこの応答とrotate-secretのみ)
{
"data": {
"capacity_warning": null,
"config_revision": 1,
"created_at": "2026-09-20T01:00:00Z",
"disabled_reason": null,
"event_types": [
"company.updated",
"company.closed",
"company.deleted",
"invoice.validity_changed"
],
"health": "healthy",
"id": "whep_df2f4bf1-4dd7-4266-9289-104897f7c993",
"last_failure_at": null,
"last_success_at": null,
"last_test_succeeded_at": null,
"recovery_required": false,
"secret": "whsec_ex+mple/Created/WebhookSecret/NotARealKey0A=",
"secret_fingerprint": "whfp_00000000000000a1",
"status": "active",
"updated_at": "2026-09-20T01:00:00Z",
"url": "https://hooks.example.jp/bango/webhooks",
"url_revision": 1
},
"links": {
"docs": "https://bango-api.jp/docs#webhook_endpoints_create",
"self": "https://api.bango-api.jp/v1/webhook-endpoints/whep_df2f4bf1-4dd7-4266-9289-104897f7c993"
},
"object": "webhook_endpoint",
"schema_version": "2026-08"
}エラー(statusとProblem code)
| status | code | description |
|---|---|---|
| 400 | VALIDATION_ERROR | body不正(VALIDATION_ERROR) |
| 401 | UNAUTHORIZED | Bearer JWT未指定・不正・期限切れ(UNAUTHORIZED) |
| 403 | FORBIDDEN | memberロール、または削除済みアカウント(JWTが有効期限内でも)・所属organizationを1件に確定できない・閉鎖済みorganization(FORBIDDEN) |
| 409 | RESOURCE_LIMIT_EXCEEDED | active endpoint数の上限超過(RESOURCE_LIMIT_EXCEEDED。resource_limit.resource=webhook_endpoints) |
| 429 | RATE_LIMIT_EXCEEDED | Control planeのレート制限超過(RATE_LIMIT_EXCEEDED) |
| 503 | DEPENDENCY_UNAVAILABLE | 依存障害(DEPENDENCY_UNAVAILABLE) |
各codeの意味と回復手順は エラーリファレンス を参照します。
GET/v1/webhook-endpoints/{id}
webhook endpoint取得
Bearer JWTendpointを1件返す。secretはsecret_fingerprintのみ。全ロールが閲覧できる。Bearer JWT(Dashboardセッション)で認証し、monthly api_requestsは消費しない。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| id | path | string | Yes | webhook endpoint ID(whep_)。書式不正・他組織・削除済みは404 |
リクエスト例
curl -H 'Authorization: Bearer <JWT>' \ 'https://api.bango-api.jp/v1/webhook-endpoints/YOUR_WEBHOOK_ENDPOINT_ID'
レスポンス例(200)
endpoint
配送中のendpoint(secretは指紋のみ)
{
"data": {
"capacity_warning": null,
"config_revision": 1,
"created_at": "2026-09-20T01:00:00Z",
"disabled_reason": null,
"event_types": [
"company.updated",
"company.closed",
"company.deleted",
"invoice.validity_changed"
],
"health": "healthy",
"id": "whep_df2f4bf1-4dd7-4266-9289-104897f7c993",
"last_failure_at": "2026-10-01T00:06:03Z",
"last_success_at": "2026-09-30T02:00:02Z",
"last_test_succeeded_at": "2026-09-20T01:05:00Z",
"recovery_required": false,
"secret_fingerprint": "whfp_00000000000000a1",
"status": "active",
"updated_at": "2026-09-20T01:05:00Z",
"url": "https://hooks.example.jp/bango/webhooks",
"url_revision": 1
},
"links": {
"docs": "https://bango-api.jp/docs#webhook_endpoints_get",
"self": "https://api.bango-api.jp/v1/webhook-endpoints/whep_df2f4bf1-4dd7-4266-9289-104897f7c993"
},
"object": "webhook_endpoint",
"schema_version": "2026-08"
}エラー(statusとProblem code)
| status | code | description |
|---|---|---|
| 401 | UNAUTHORIZED | Bearer JWT未指定・不正・期限切れ(UNAUTHORIZED) |
| 403 | FORBIDDEN | 削除済みアカウント(JWTが有効期限内でも)・所属organizationを1件に確定できない・閉鎖済みorganization(FORBIDDEN) |
| 404 | NOT_FOUND | 書式不正・他組織・削除済み(NOT_FOUND) |
| 429 | RATE_LIMIT_EXCEEDED | Control planeのレート制限超過(RATE_LIMIT_EXCEEDED) |
| 503 | DEPENDENCY_UNAVAILABLE | 依存障害(DEPENDENCY_UNAVAILABLE) |
各codeの意味と回復手順は エラーリファレンス を参照します。
PATCH/v1/webhook-endpoints/{id}
webhook endpoint更新
Bearer JWTurl・event_typesの少なくとも一方を更新する(statusは変更不可)。URL変更は安全性を再検証し、disabled/goneをactiveへ戻さない。変更でconfig_revisionが進み、成功済みtest受領は無効になる。owner/adminのみ。Bearer JWT(Dashboardセッション)で認証し、monthly api_requestsは消費しない。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| id | path | string | Yes | webhook endpoint ID(whep_)。書式不正・他組織・削除済みは404 |
リクエスト例
curl -X PATCH -H 'Authorization: Bearer <JWT>' -H 'Content-Type: application/json' \
-d '{"event_types":["company.closed","company.deleted","invoice.validity_changed"]}' \
'https://api.bango-api.jp/v1/webhook-endpoints/YOUR_WEBHOOK_ENDPOINT_ID'レスポンス例(200)
更新後のendpoint
event_types更新(config_revisionが進みtest受領は無効化)
{
"data": {
"capacity_warning": null,
"config_revision": 2,
"created_at": "2026-09-20T01:00:00Z",
"disabled_reason": null,
"event_types": [
"company.closed",
"company.deleted",
"invoice.validity_changed"
],
"health": "healthy",
"id": "whep_df2f4bf1-4dd7-4266-9289-104897f7c993",
"last_failure_at": "2026-10-01T00:06:03Z",
"last_success_at": "2026-09-30T02:00:02Z",
"last_test_succeeded_at": null,
"recovery_required": false,
"secret_fingerprint": "whfp_00000000000000a1",
"status": "active",
"updated_at": "2026-10-02T00:00:00Z",
"url": "https://hooks.example.jp/bango/webhooks",
"url_revision": 1
},
"links": {
"docs": "https://bango-api.jp/docs#webhook_endpoints_patch",
"self": "https://api.bango-api.jp/v1/webhook-endpoints/whep_df2f4bf1-4dd7-4266-9289-104897f7c993"
},
"object": "webhook_endpoint",
"schema_version": "2026-08"
}エラー(statusとProblem code)
| status | code | description |
|---|---|---|
| 400 | VALIDATION_ERROR | body不正・空更新(VALIDATION_ERROR) |
| 401 | UNAUTHORIZED | Bearer JWT未指定・不正・期限切れ(UNAUTHORIZED) |
| 403 | FORBIDDEN | memberロール、または削除済みアカウント(JWTが有効期限内でも)・所属organizationを1件に確定できない・閉鎖済みorganization(FORBIDDEN) |
| 404 | NOT_FOUND | 書式不正・他組織・削除済み(NOT_FOUND) |
| 429 | RATE_LIMIT_EXCEEDED | Control planeのレート制限超過(RATE_LIMIT_EXCEEDED) |
| 503 | DEPENDENCY_UNAVAILABLE | 依存障害(DEPENDENCY_UNAVAILABLE) |
各codeの意味と回復手順は エラーリファレンス を参照します。
DELETE/v1/webhook-endpoints/{id}
webhook endpoint削除
Bearer JWTendpointを削除し204(bodyなし)を返す。削除済みendpointへの再DELETEも204を返す(冪等)。未配送のdeliveryは配送されない。owner/adminのみ。Bearer JWT(Dashboardセッション)で認証し、monthly api_requestsは消費しない。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| id | path | string | Yes | webhook endpoint ID(whep_)。書式不正・他組織は404。削除済みへの再DELETEは204(冪等) |
リクエスト例
curl -X DELETE -H 'Authorization: Bearer <JWT>' \ 'https://api.bango-api.jp/v1/webhook-endpoints/YOUR_WEBHOOK_ENDPOINT_ID'
レスポンス例(204)
削除済み(bodyなし)。削除済みへの再DELETEも204(冪等)
エラー(statusとProblem code)
| status | code | description |
|---|---|---|
| 401 | UNAUTHORIZED | Bearer JWT未指定・不正・期限切れ(UNAUTHORIZED) |
| 403 | FORBIDDEN | memberロール、または削除済みアカウント(JWTが有効期限内でも)・所属organizationを1件に確定できない・閉鎖済みorganization(FORBIDDEN) |
| 404 | NOT_FOUND | 書式不正・他組織・不存在(NOT_FOUND) |
| 429 | RATE_LIMIT_EXCEEDED | Control planeのレート制限超過(RATE_LIMIT_EXCEEDED) |
| 503 | DEPENDENCY_UNAVAILABLE | 依存障害(DEPENDENCY_UNAVAILABLE) |
各codeの意味と回復手順は エラーリファレンス を参照します。
POST/v1/webhook-endpoints/{id}/pause
webhook endpoint一時停止
Bearer JWTactiveのendpointを一時停止する(request bodyなし)。停止中はdeliveryを送らない。既にpausedなら何も変更せず現在のendpointを200で返す。disabled/goneは409。owner/adminのみ。Bearer JWT(Dashboardセッション)で認証し、monthly api_requestsは消費しない。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| id | path | string | Yes | webhook endpoint ID(whep_)。書式不正・他組織・削除済みは404 |
リクエスト例
curl -X POST -H 'Authorization: Bearer <JWT>' \ 'https://api.bango-api.jp/v1/webhook-endpoints/YOUR_WEBHOOK_ENDPOINT_ID/pause'
レスポンス例(200)
停止後のendpoint
一時停止(healthはactive時のみ)
{
"data": {
"capacity_warning": null,
"config_revision": 2,
"created_at": "2026-09-20T01:00:00Z",
"disabled_reason": null,
"event_types": [
"company.updated",
"company.closed",
"company.deleted",
"invoice.validity_changed"
],
"health": null,
"id": "whep_df2f4bf1-4dd7-4266-9289-104897f7c993",
"last_failure_at": "2026-10-01T00:06:03Z",
"last_success_at": "2026-09-30T02:00:02Z",
"last_test_succeeded_at": null,
"recovery_required": false,
"secret_fingerprint": "whfp_00000000000000a1",
"status": "paused",
"updated_at": "2026-10-02T00:00:00Z",
"url": "https://hooks.example.jp/bango/webhooks",
"url_revision": 1
},
"links": {
"docs": "https://bango-api.jp/docs#webhook_endpoints_pause",
"self": "https://api.bango-api.jp/v1/webhook-endpoints/whep_df2f4bf1-4dd7-4266-9289-104897f7c993"
},
"object": "webhook_endpoint",
"schema_version": "2026-08"
}エラー(statusとProblem code)
| status | code | description |
|---|---|---|
| 401 | UNAUTHORIZED | Bearer JWT未指定・不正・期限切れ(UNAUTHORIZED) |
| 403 | FORBIDDEN | memberロール、または削除済みアカウント(JWTが有効期限内でも)・所属organizationを1件に確定できない・閉鎖済みorganization(FORBIDDEN) |
| 404 | NOT_FOUND | 書式不正・他組織・削除済み(NOT_FOUND) |
| 409 | WEBHOOK_ENDPOINT_NOT_ACTIVE | disabled/gone(WEBHOOK_ENDPOINT_NOT_ACTIVE) |
| 429 | RATE_LIMIT_EXCEEDED | Control planeのレート制限超過(RATE_LIMIT_EXCEEDED) |
| 503 | DEPENDENCY_UNAVAILABLE | 依存障害(DEPENDENCY_UNAVAILABLE) |
各codeの意味と回復手順は エラーリファレンス を参照します。
POST/v1/webhook-endpoints/{id}/resume
webhook endpoint再開
Bearer JWTpaused/disabled/goneのendpointを再開する(request bodyなし)。通常のpausedはtest不要。recovery_required=trueのpausedとsecurity_blocked以外のdisabledは、現在のconfig_revisionで成功したtest受領が必要。goneとdisabled_reason=security_blockedのdisabledは、その状態になった後にPATCHでurlを変更し(url_revisionが進む)、次に現在のconfig_revisionでtestを成功させ、最後にresumeする。PATCHはconfig_revisionを進めて既存のtest受領を無効にするため、testはURL変更の後に行う。過去のdeliveryは自動再開しない。予約済みdowngradeの発効後に枠を超える場合はcapacity_warningを返す。owner/adminのみ。Bearer JWT(Dashboardセッション)で認証し、monthly api_requestsは消費しない。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| id | path | string | Yes | webhook endpoint ID(whep_)。書式不正・他組織・削除済みは404 |
リクエスト例
curl -X POST -H 'Authorization: Bearer <JWT>' \ 'https://api.bango-api.jp/v1/webhook-endpoints/YOUR_WEBHOOK_ENDPOINT_ID/resume'
レスポンス例(200)
再開後のendpoint
再開(予約済みdowngrade後に枠を超える場合のwarning付き)
{
"data": {
"capacity_warning": {
"active_endpoints": 2,
"effective_at": "2026-11-01T00:00:00Z",
"pending_plan_code": "starter",
"target_limit": 1
},
"config_revision": 3,
"created_at": "2026-09-20T01:00:00Z",
"disabled_reason": null,
"event_types": [
"company.updated",
"company.closed",
"company.deleted",
"invoice.validity_changed"
],
"health": "healthy",
"id": "whep_df2f4bf1-4dd7-4266-9289-104897f7c993",
"last_failure_at": null,
"last_success_at": null,
"last_test_succeeded_at": null,
"recovery_required": false,
"secret_fingerprint": "whfp_00000000000000a1",
"status": "active",
"updated_at": "2026-10-03T00:00:00Z",
"url": "https://hooks.example.jp/bango/webhooks",
"url_revision": 1
},
"links": {
"docs": "https://bango-api.jp/docs#webhook_endpoints_resume",
"self": "https://api.bango-api.jp/v1/webhook-endpoints/whep_df2f4bf1-4dd7-4266-9289-104897f7c993"
},
"object": "webhook_endpoint",
"schema_version": "2026-08"
}エラー(statusとProblem code)
| status | code | description |
|---|---|---|
| 401 | UNAUTHORIZED | Bearer JWT未指定・不正・期限切れ(UNAUTHORIZED) |
| 403 | FORBIDDEN | memberロール、または削除済みアカウント(JWTが有効期限内でも)・所属organizationを1件に確定できない・閉鎖済みorganization(FORBIDDEN) |
| 404 | NOT_FOUND | 書式不正・他組織・削除済み(NOT_FOUND) |
| 409 | WEBHOOK_ENDPOINT_RECOVERY_REQUIRED / RESOURCE_LIMIT_EXCEEDED | active endpoint数の上限超過(RESOURCE_LIMIT_EXCEEDED)・再開条件の未充足(WEBHOOK_ENDPOINT_RECOVERY_REQUIRED。gone/security_blockedでその後のURL変更がない、または現在のconfig_revisionで成功したtest受領がない) |
| 429 | RATE_LIMIT_EXCEEDED | Control planeのレート制限超過(RATE_LIMIT_EXCEEDED) |
| 503 | DEPENDENCY_UNAVAILABLE | 依存障害(DEPENDENCY_UNAVAILABLE) |
各codeの意味と回復手順は エラーリファレンス を参照します。
POST/v1/webhook-endpoints/{id}/rotate-secret
署名secretのrotation
Bearer JWTmode=gracefulは旧secretを24時間併存させ、immediateは即時に新secretだけへ切り替える。200応答のdata.secretが新secret全文を得る唯一の機会。secretを含む応答はキャッシュさせない。owner/adminのみ。Bearer JWT(Dashboardセッション)で認証し、monthly api_requestsは消費しない。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| id | path | string | Yes | webhook endpoint ID(whep_)。書式不正・他組織・削除済みは404 |
リクエスト例
# data.secret は一度しか返りません。安全な保管先へ保存し、ログや標準出力に出さないでください。
curl -X POST -H 'Authorization: Bearer <JWT>' -H 'Content-Type: application/json' \
-d '{"mode":"graceful"}' \
'https://api.bango-api.jp/v1/webhook-endpoints/YOUR_WEBHOOK_ENDPOINT_ID/rotate-secret'レスポンス例(200)
新しい署名secret全文を含むendpoint
graceful rotation(新secret全文はこの応答のみ)
{
"data": {
"capacity_warning": null,
"config_revision": 2,
"created_at": "2026-09-20T01:00:00Z",
"disabled_reason": null,
"event_types": [
"company.updated",
"company.closed",
"company.deleted",
"invoice.validity_changed"
],
"health": "healthy",
"id": "whep_df2f4bf1-4dd7-4266-9289-104897f7c993",
"last_failure_at": "2026-10-01T00:06:03Z",
"last_success_at": "2026-09-30T02:00:02Z",
"last_test_succeeded_at": null,
"recovery_required": false,
"secret": "whsec_ex+mple/Rotated/WebhookSecret/NotARealKey0A=",
"secret_fingerprint": "whfp_00000000000000a2",
"status": "active",
"updated_at": "2026-10-02T00:00:00Z",
"url": "https://hooks.example.jp/bango/webhooks",
"url_revision": 1
},
"links": {
"docs": "https://bango-api.jp/docs#webhook_endpoints_rotate_secret",
"self": "https://api.bango-api.jp/v1/webhook-endpoints/whep_df2f4bf1-4dd7-4266-9289-104897f7c993"
},
"object": "webhook_endpoint",
"schema_version": "2026-08"
}エラー(statusとProblem code)
| status | code | description |
|---|---|---|
| 400 | VALIDATION_ERROR | body不正(VALIDATION_ERROR) |
| 401 | UNAUTHORIZED | Bearer JWT未指定・不正・期限切れ(UNAUTHORIZED) |
| 403 | FORBIDDEN | memberロール、または削除済みアカウント(JWTが有効期限内でも)・所属organizationを1件に確定できない・閉鎖済みorganization(FORBIDDEN) |
| 404 | NOT_FOUND | 書式不正・他組織・削除済み(NOT_FOUND) |
| 409 | SECRET_ROTATION_IN_PROGRESS | rotation進行中(SECRET_ROTATION_IN_PROGRESS) |
| 429 | RATE_LIMIT_EXCEEDED | Control planeのレート制限超過(RATE_LIMIT_EXCEEDED) |
| 503 | DEPENDENCY_UNAVAILABLE | 依存障害(DEPENDENCY_UNAVAILABLE) |
各codeの意味と回復手順は エラーリファレンス を参照します。
POST/v1/webhook-endpoints/{id}/test
webhook test送信
Bearer JWT現在の設定へ署名付きtest eventを1回送る(request bodyなし・自動retryなし・本番deliveryの試行回数は消費しない)。受信側の非2xx・DNS/TLS/timeout・安全でない宛先は200のtest結果(success=false)で返す。ただし安全でない宛先が確定し、送信中に設定が変わっていない場合は副作用としてendpointをdisabled(disabled_reason=security_blocked)へ停止し未claimのdeliveryをcancelする(再開はURL変更→test→resume)。recovery_eligibleは送信中に設定が変わっていない場合だけtrue。owner/adminのみ。Bearer JWT(Dashboardセッション)で認証し、monthly api_requestsは消費しない。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| id | path | string | Yes | webhook endpoint ID(whep_)。書式不正・他組織・削除済みは404 |
リクエスト例
curl -X POST -H 'Authorization: Bearer <JWT>' \ 'https://api.bango-api.jp/v1/webhook-endpoints/YOUR_WEBHOOK_ENDPOINT_ID/test'
レスポンス例(200)
test結果
test送信の結果(受信側の失敗も200のtest結果で返る)
{
"data": {
"duration_ms": 182,
"error_code": null,
"http_status": 204,
"recovery_eligible": true,
"success": true,
"tested_config_revision": 1
},
"links": {
"docs": "https://bango-api.jp/docs#webhook_endpoints_test",
"self": "https://api.bango-api.jp/v1/webhook-endpoints/whep_df2f4bf1-4dd7-4266-9289-104897f7c993/test"
},
"object": "webhook_test",
"schema_version": "2026-08"
}エラー(statusとProblem code)
| status | code | description |
|---|---|---|
| 401 | UNAUTHORIZED | Bearer JWT未指定・不正・期限切れ(UNAUTHORIZED) |
| 403 | FORBIDDEN | memberロール、または削除済みアカウント(JWTが有効期限内でも)・所属organizationを1件に確定できない・閉鎖済みorganization(FORBIDDEN) |
| 404 | NOT_FOUND | 書式不正・他組織・削除済み(NOT_FOUND) |
| 429 | RATE_LIMIT_EXCEEDED | Control planeのレート制限超過(RATE_LIMIT_EXCEEDED) |
| 503 | DEPENDENCY_UNAVAILABLE | 依存障害(DEPENDENCY_UNAVAILABLE) |
各codeの意味と回復手順は エラーリファレンス を参照します。
GET/v1/webhook-endpoints/{id}/deliveries
delivery一覧
Bearer JWTendpointのdeliveryを新しい順に返す(keyset cursor・offsetなし・metaなし)。宛先URL・secret・署名・接続先IPは含まない。全ロールが閲覧できる。Bearer JWT(Dashboardセッション)で認証し、monthly api_requestsは消費しない。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| id | path | string | Yes | webhook endpoint ID(whep_)。書式不正・他組織・削除済みは404 |
| limit | query | integer | No | 1ページの件数(1〜100) |
| cursor | query | string | No | 前ページのnext_cursor(opaque)。書式不正・破損・別versionは400。クライアントは解釈・生成しない |
リクエスト例
curl -H 'Authorization: Bearer <JWT>' \ 'https://api.bango-api.jp/v1/webhook-endpoints/YOUR_WEBHOOK_ENDPOINT_ID/deliveries'
レスポンス例(200)
delivery一覧
新しい順のdelivery一覧(next_cursorはhas_more時のみ)
{
"data": [
{
"attempt_count": 2,
"canceled_at": null,
"created_at": "2026-10-01T00:05:01.537402Z",
"delivered_at": null,
"delivery_cycle": 1,
"event_id": "evt_bf00d209-6170-472a-9b5e-53183ba76d5a",
"id": "whd_a7f44d90-dc03-4757-9250-f459e3640f3f",
"last_error_code": null,
"last_status_code": 503,
"next_attempt_at": "2026-10-01T00:10:03Z",
"status": "retrying",
"terminal_reason": null,
"updated_at": "2026-10-01T00:06:03.118220Z"
},
{
"attempt_count": 1,
"canceled_at": null,
"created_at": "2026-09-30T02:00:01.204118Z",
"delivered_at": "2026-09-30T02:00:02.391027Z",
"delivery_cycle": 1,
"event_id": "evt_ddc487b3-8af5-4c1f-b2fe-7d59ba5949da",
"id": "whd_435ca06f-26b3-4c6f-8778-a92ce544a124",
"last_error_code": null,
"last_status_code": 200,
"next_attempt_at": null,
"status": "delivered",
"terminal_reason": null,
"updated_at": "2026-09-30T02:00:02.391027Z"
}
],
"has_more": true,
"item": "webhook_delivery",
"links": {
"docs": "https://bango-api.jp/docs#webhook_deliveries_list",
"next": "https://api.bango-api.jp/v1/webhook-endpoints/whep_df2f4bf1-4dd7-4266-9289-104897f7c993/deliveries?limit=2&cursor=wd1.eyJjYSI6IjIwMjYtMDktMzBUMDI6MDA6MDEuMjA0MTE4WiIsImlkIjoiNDM1Y2EwNmYtMjZiMy00YzZmLTg3NzgtYTkyY2U1NDRhMTI0In0",
"self": "https://api.bango-api.jp/v1/webhook-endpoints/whep_df2f4bf1-4dd7-4266-9289-104897f7c993/deliveries?limit=2"
},
"next_cursor": "wd1.eyJjYSI6IjIwMjYtMDktMzBUMDI6MDA6MDEuMjA0MTE4WiIsImlkIjoiNDM1Y2EwNmYtMjZiMy00YzZmLTg3NzgtYTkyY2U1NDRhMTI0In0",
"object": "list",
"schema_version": "2026-08"
}エラー(statusとProblem code)
| status | code | description |
|---|---|---|
| 400 | VALIDATION_ERROR | query不正・cursorの書式不正/破損(VALIDATION_ERROR) |
| 401 | UNAUTHORIZED | Bearer JWT未指定・不正・期限切れ(UNAUTHORIZED) |
| 403 | FORBIDDEN | 削除済みアカウント(JWTが有効期限内でも)・所属organizationを1件に確定できない・閉鎖済みorganization(FORBIDDEN) |
| 404 | NOT_FOUND | endpointの書式不正・他組織・削除済み(NOT_FOUND) |
| 429 | RATE_LIMIT_EXCEEDED | Control planeのレート制限超過(RATE_LIMIT_EXCEEDED) |
| 503 | DEPENDENCY_UNAVAILABLE | 依存障害(DEPENDENCY_UNAVAILABLE) |
各codeの意味と回復手順は エラーリファレンス を参照します。
GET/v1/webhook-endpoints/{id}/deliveries/{delivery_id}
delivery詳細
Bearer JWTdeliveryの状態と試行履歴(新しい順・attempt_cursorで継続)を返す。試行の診断情報はdiagnostics_retained_since以降のみ保持する。全ロールが閲覧できる。Bearer JWT(Dashboardセッション)で認証し、monthly api_requestsは消費しない。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| id | path | string | Yes | webhook endpoint ID(whep_)。書式不正・他組織・削除済みは404 |
| delivery_id | path | string | Yes | delivery ID(whd_)。書式不正・不存在は404 |
| attempt_limit | query | integer | No | 1ページの試行件数(1〜100) |
| attempt_cursor | query | string | No | 前ページのattempts_next_cursor(opaque)。書式不正・破損・別versionは400。クライアントは解釈・生成しない |
リクエスト例
curl -H 'Authorization: Bearer <JWT>' \ 'https://api.bango-api.jp/v1/webhook-endpoints/YOUR_WEBHOOK_ENDPOINT_ID/deliveries/YOUR_DELIVERY_ID'
レスポンス例(200)
delivery詳細と試行履歴
再送待ちdeliveryと試行履歴(診断は30日保持)
{
"attempts": [
{
"attempt_number": 2,
"delivery_cycle": 1,
"duration_ms": 812,
"error_code": null,
"finished_at": "2026-10-01T00:06:03.117904Z",
"response_status": 503,
"retry_after_at": null,
"started_at": "2026-10-01T00:06:02.305511Z",
"status": "failed"
},
{
"attempt_number": 1,
"delivery_cycle": 1,
"duration_ms": 609,
"error_code": null,
"finished_at": "2026-10-01T00:05:03.090617Z",
"response_status": 503,
"retry_after_at": null,
"started_at": "2026-10-01T00:05:02.481352Z",
"status": "failed"
}
],
"attempts_has_more": false,
"attempts_next_cursor": null,
"data": {
"attempt_count": 2,
"canceled_at": null,
"created_at": "2026-10-01T00:05:01.537402Z",
"delivered_at": null,
"delivery_cycle": 1,
"event_id": "evt_bf00d209-6170-472a-9b5e-53183ba76d5a",
"id": "whd_a7f44d90-dc03-4757-9250-f459e3640f3f",
"last_error_code": null,
"last_status_code": 503,
"next_attempt_at": "2026-10-01T00:10:03Z",
"status": "retrying",
"terminal_reason": null,
"updated_at": "2026-10-01T00:06:03.118220Z"
},
"diagnostics_retained_since": "2026-09-02T00:07:00Z",
"links": {
"docs": "https://bango-api.jp/docs#webhook_deliveries_get",
"self": "https://api.bango-api.jp/v1/webhook-endpoints/whep_df2f4bf1-4dd7-4266-9289-104897f7c993/deliveries/whd_a7f44d90-dc03-4757-9250-f459e3640f3f"
},
"object": "webhook_delivery",
"schema_version": "2026-08"
}エラー(statusとProblem code)
| status | code | description |
|---|---|---|
| 400 | VALIDATION_ERROR | query不正・cursorの書式不正/破損(VALIDATION_ERROR) |
| 401 | UNAUTHORIZED | Bearer JWT未指定・不正・期限切れ(UNAUTHORIZED) |
| 403 | FORBIDDEN | 削除済みアカウント(JWTが有効期限内でも)・所属organizationを1件に確定できない・閉鎖済みorganization(FORBIDDEN) |
| 404 | NOT_FOUND | 書式不正・他組織・不存在(NOT_FOUND) |
| 429 | RATE_LIMIT_EXCEEDED | Control planeのレート制限超過(RATE_LIMIT_EXCEEDED) |
| 503 | DEPENDENCY_UNAVAILABLE | 依存障害(DEPENDENCY_UNAVAILABLE) |
各codeの意味と回復手順は エラーリファレンス を参照します。
POST/v1/webhook-endpoints/{id}/deliveries/{delivery_id}/replay
delivery手動再送
Bearer JWTdeliveryを新しいdelivery cycleとして再送する(request bodyなし・attempt_countは0から)。owner/adminのみ。Bearer JWT(Dashboardセッション)で認証し、monthly api_requestsは消費しない。
パラメータ
| name | in | type | required | description |
|---|---|---|---|---|
| id | path | string | Yes | webhook endpoint ID(whep_)。書式不正・他組織・削除済みは404 |
| delivery_id | path | string | Yes | delivery ID(whd_)。書式不正・不存在は404 |
リクエスト例
curl -X POST -H 'Authorization: Bearer <JWT>' \ 'https://api.bango-api.jp/v1/webhook-endpoints/YOUR_WEBHOOK_ENDPOINT_ID/deliveries/YOUR_DELIVERY_ID/replay'
レスポンス例(200)
再送を受け付けたdelivery
exhausted delivery の手動再送(新cycle)
{
"data": {
"attempt_count": 0,
"canceled_at": null,
"created_at": "2026-10-02T02:00:01.318204Z",
"delivered_at": null,
"delivery_cycle": 2,
"event_id": "evt_a0be2cc0-0ab2-4b1b-95de-1094ce08d7d7",
"id": "whd_38f8e91d-77e6-4992-a453-97075dec4df4",
"last_error_code": null,
"last_status_code": null,
"next_attempt_at": "2026-10-05T09:00:00.214508Z",
"status": "pending",
"terminal_reason": null,
"updated_at": "2026-10-05T09:00:00.214508Z"
},
"links": {
"docs": "https://bango-api.jp/docs#webhook_deliveries_replay",
"self": "https://api.bango-api.jp/v1/webhook-endpoints/whep_df2f4bf1-4dd7-4266-9289-104897f7c993/deliveries/whd_38f8e91d-77e6-4992-a453-97075dec4df4/replay"
},
"object": "webhook_delivery",
"schema_version": "2026-08"
}エラー(statusとProblem code)
| status | code | description |
|---|---|---|
| 401 | UNAUTHORIZED | Bearer JWT未指定・不正・期限切れ(UNAUTHORIZED) |
| 403 | FORBIDDEN | memberロール、または削除済みアカウント(JWTが有効期限内でも)・所属organizationを1件に確定できない・閉鎖済みorganization(FORBIDDEN) |
| 404 | NOT_FOUND | 書式不正・他組織・不存在(NOT_FOUND) |
| 409 | WEBHOOK_DELIVERY_NOT_REPLAYABLE / WEBHOOK_ENDPOINT_NOT_ACTIVE | endpointがactiveでない(WEBHOOK_ENDPOINT_NOT_ACTIVE)・再送できない状態(WEBHOOK_DELIVERY_NOT_REPLAYABLE) |
| 410 | CHANGE_EVENT_EXPIRED | 対象eventの保持期限切れ(CHANGE_EVENT_EXPIRED) |
| 429 | RATE_LIMIT_EXCEEDED | Control planeのレート制限超過(RATE_LIMIT_EXCEEDED) |
| 503 | DEPENDENCY_UNAVAILABLE | 依存障害(DEPENDENCY_UNAVAILABLE) |
各codeの意味と回復手順は エラーリファレンス を参照します。