チェンジログ
このページは、API とこのドキュメントの変更を記録します。記載は 2026-09-19 から始まります。このページが存在する前に起きた変更は遡って記載されないため、記載がない場合は「変更なし」ではなく「記録なし」と解釈してください。
| 種別 | 意味 |
|---|---|
| API | サービスが変更されました — エンドポイント、フィールド、制限など。 |
| コントラクト | 公開されている OpenAPI ドキュメントが変更されました。 |
| ドキュメント | ドキュメントが変更されました。API は動いていません。 |
| 訂正 | ドキュメントが API を誤って記述していました。 |
訂正の項目は、意図的に別扱いしています。これは API の動作ではなく、読む内容の変化を表します — そのため統合が壊れることはありませんが、古い記述に基づいて構築したものは誤っている可能性があります。
2026-10-27 — 国コードリファレンス
Section titled “2026-10-27 — 国コードリファレンス”ドキュメント · 追加
- 公式割り当ての ISO 3166-1 alpha-2 コードすべてを掲載した検索可能な国コード一覧ページを追加し、
countryフィールドを受け付けるエンドポイントからリンクしました。
2026-09-19 — ドキュメントを再編成し、コントラクトを公開
Section titled “2026-09-19 — ドキュメントを再編成し、コントラクトを公開”ドキュメント · 追加
- リファレンスセクション:OpenAPI、バージョニングと非推奨化、ステータスとサポート、セキュリティ、用語集。
- OpenAPI 3.1 ドキュメントが
https://docs.zelnum.com/openapi.yamlで公開されました。プラットフォーム側のコピーとバイト単位で同一のミラーで、Postman、Insomnia、クライアントジェネレーターに取り込めます。 - 両方の検出モード向けのPython、Node.js、PHP、Goのクライアント例を、既存の cURL 例と並べて追加しました。これまでナビゲーションは SDK の例をうたいながら、存在したのは cURL だけでした。
- リアルタイムチェック、バルク送信、タスクステータス、結果エンドポイントのフィールドごとのレスポンステーブル。
- 2つの新しいビルドガード:列が揃わないテーブルがあるとどのロケールでもビルドが失敗するようになり、またこのドキュメントが挙げるすべてのエンドポイントを、ベンダリング済みの OpenAPI ドキュメントと双方向に照合します — コントラクトに存在しない文書化済みエンドポイントも、誰も文書化していないコントラクトのパスも、どちらも失敗となります。
コントラクト · 追加
- OpenAPI ドキュメント自体:10 個のパス、9 個のスキーマ、そして
deprecated: trueがレガシーのPOST /v1/realtime/detectに付いています。
ドキュメント · 訂正
- バルクの
countryは、すべての送信で必須として記載されていました。 これは電話プロダクトでは必須で、メールプロダクトでは省略しなければなりません。記載どおりだと、9個のバルクメールプロダクトは送信できず、すべてのリクエストが検証で失敗していました。 - バルクの件数ルールが誤っていました。 「リクエストあたり 1,000〜2,000,000 件」と書かれていました。実際のルールは、選択したプロダクト自身の最小件数 — 500、1,000、2,000 のいずれか — から、プラットフォームの上限である 2,000,000 までです。古い数値では、最小件数が 500 のプロダクト11件が除外されていました。
- エラー一覧に、API が決して返さない4つのコードが記載されていました。 プラットフォームのレガシーなドキュメントページには
not_found、result_not_ready、result_expired、validation_failedが挙げられていますが、実装はそのいずれも返さず、これらのレスポンスにはcodeフィールドすら含まれません。テーブルは現在、API が実際に返す 22 個のコードを記載しており、2つ目のテーブルがコードを持たない条件を説明しています — これらの4つの分岐を移植した人向けの警告付きです。 - レスポンス例に、API が実際に返すフィールドが欠けていました。 リアルタイムレスポンスの
series、charged_amount、refunded_amount、バルク送信のidempotent_replayとrecovery_pending、そしてsubmitted、prefiltered、deduped、stage、last_progress_at、failure_messageを含む10個のタスク進捗カウンターです。 - レート制限が誤ったエンドポイントを挙げていました。 リアルタイムの行には
POST /v1/realtime/check/phoneと書かれていましたが、制限が適用されるのはPOST /v1/realtime/check/{series}で、メールも含まれます。 - レスポンスヘッダーの記述が誤っていました。 レート制限のページは、完全なヘッダー一式がすべてのレスポンスに現れるかのように示していました。そうではありません。リアルタイムのバケットは、成功時に
X-RateLimit-Remainingのみを報告し、X-RateLimit-Limitは決して報告しません。またX-RateLimit-Resetは、general または detection の429にのみ現れます。ページは現在、どのヘッダーがどこに現れるかを記載しています。 - キーのモデルの記述が誤っていました。 セキュリティのページは、アカウントが一度に1つのキーを保持すると述べていました。アカウントは複数の有効なキーを保持でき、コンソールはそれらを作成・再生成・削除します — そのため、ダウンタイムなしの段階的ローテーションが可能で、その場での再生成は重複期間がない方式です。
GET /v1/api-keyが報告するのは一覧ではなく、最新の有効なキーであり、そのlast_usedは最大でも5分に一度しか書き込まれません。 - ID とスラッグの関係の記述が誤っていました。 用語集は、ID とスラッグを取り違えると
product_mode_not_supportedとして拒否されると述べていました。リアルタイムエンドポイントではproduct_idsが整数の配列として検証されるため、スラッグはより早い段階で400 invalid_realtime_requestとして拒否されます。422 product_mode_not_supportedは、リアルタイムプロダクトに対するバルクエンドポイントの応答です。 - レスポンス形式のページが、通貨について残高ページと矛盾していました。 一方は「アカウントの請求通貨」、もう一方は USD と述べていました。現在はどちらも USD で、これはコントラクトと残高エンドポイントが示すとおりです。
- 出典のない価格単位が記載されていました。 バルクは「10,000 チェックあたりの価格」と説明されていました。カタログは価格を公開していないため、その記述は保持されず削除されました。
- 2つの訂正が、手書きのページにしか反映されていませんでした。 通貨の記述と「10,000 チェックあたり」という主張は、英語版と簡体字中国語版では修正されていましたが、他の7つのロケールを生成する文字列テーブルには依然として残っていたため、7つのロケールが両方を公開し続けていました。これらはテーブル側でも訂正されています。
/examples/はロケールごとに異なるページでした。 英語版は短いナビゲーションのハブでしたが、他の8つは5段階のバルクのウォークスルーを表示していました。英語版がウォークスルーに合わせられたため、9つのロケールすべてが同じ内容を持ちます。
ドキュメント · 修正
- 生成された7つのロケールすべてで、パラメータテーブルが説明列を黙って失っていました。 共有ヘルパーが、4つのセルを持つ行に対して3列のヘッダーを出力し、GFM はヘッダーの幅を超えたセルをすべて破棄します — そのため、例えばスペイン語では「必須」の値が「説明」見出しの下に描画され、説明自体が消えていました。これは7つのロケールのうち3つのページで起きていました。ヘルパーは現在、明示的な列構成を受け取り、列が揃わない行でビルドを失敗させます。また dist 段階のガードが、すべてのロケールの描画済みテーブルを独立に再確認します。
- 生成されたロケールが、プロダクトテーブルの列ヘッダー、注記、同期行を英語のまま描画していました。また、注記のバッククォートがそのままの文字としてブラウザに届いていました。コンポーネントの文言は翻訳済みの文字列テーブルから取得されるようになり、翻訳が欠けている場合はフォールバックせずビルドが失敗します。
まだフィードはありません。それまでは、コントラクトが信頼できるシグナルです:
npm run openapi:checkを定期ジョブで実行します — 公開されたドキュメントが、あなたがベンダリングしたコピーと異なった瞬間に、非ゼロで終了します。2つの URL については OpenAPI を参照してください。