ドキュメント
ベースURL: https://api.example.jp — 認証は x-api-key ヘッダー。レスポンスはすべてJSON(UTF-8)です。初めての方は使い方ガイドから順番に進めると5分で導入できます。
エンドポイント
GET /api/v1/search — 住所から郵便番号を検索
| パラメータ | 必須 | 説明 |
|---|---|---|
address | 必須 | 住所文字列(256文字まで)。「丸の内1丁目2-3 ○○ビル」のような番地・建物名付きの入力も町名まで自動で解釈します。Marunouchi, Chiyoda-ku, Tokyo のようなローマ字・英語表記でも検索できます。 |
limit | 任意 | 返す件数。1〜50、デフォルト10。 |
lang | 任意 | エラーメッセージの言語。en で英語(未指定時は Accept-Language を参照)。エラーコードは言語に依らず不変です。 |
curl --get "https://api.example.jp/api/v1/search" \
--data-urlencode "address=東京都千代田区丸の内" \
-H "x-api-key: YOUR_KEY"
{
"query": "東京都千代田区丸の内",
"count": 1,
"results": [
{ "zipcode": "100-0005", "prefecture": "東京都",
"city": "千代田区", "town": "丸の内",
"address": "東京都千代田区丸の内", "kana": "...",
"prefecture_romaji": "Tokyo", "city_romaji": "Chiyoda-ku",
"town_romaji": "Marunochi", "romaji": "Marunochi, Chiyoda-ku, Tokyo",
"score": 266 }
]
}*_romaji / romaji は日本郵便の公式ローマ字データ準拠です(例: 丸の内は公式表記の Marunochi)。検索入力側は Marunouchi などの一般的な綴り・マクロン付き(Ōsaka)・Shimbashi/Shinbashi 等の表記ゆれも吸収します。--get --data-urlencode を使ってください。fetch / axios 等のHTTPクライアントは自動でエンコードするため対応不要です。GET /api/v1/lookup — 郵便番号から住所を逆引き
| パラメータ | 必須 | 説明 |
|---|---|---|
zipcode | 必須 | 100-0005 または 1000005 形式(厳密一致)。 |
curl "https://api.example.jp/api/v1/lookup?zipcode=100-0005" \
-H "x-api-key: YOUR_KEY"GET /api/v1/health — 稼働状態とデータ鮮度(認証不要)
データ件数・更新日・データストア到達性を返します。障害時は 503 {"status":"degraded"}。監視にどうぞ。
コード例(言語別)
住所→郵便番号(/api/v1/search)の呼び出し例です。YOUR_KEY を発行したAPIキーに置き換えてください。逆引きは /api/v1/lookup にパラメータを zipcode に変えるだけです。
curl --get "https://api.example.jp/api/v1/search" \
--data-urlencode "address=東京都千代田区丸の内" \
-H "x-api-key: YOUR_KEY"
const url = new URL("https://api.example.jp/api/v1/search");
url.searchParams.set("address", "東京都千代田区丸の内");
const res = await fetch(url, {
headers: { "x-api-key": "YOUR_KEY" },
});
const data = await res.json();
console.log(data.results);
import requests
res = requests.get(
"https://api.example.jp/api/v1/search",
params={"address": "東京都千代田区丸の内"},
headers={"x-api-key": "YOUR_KEY"},
)
res.raise_for_status()
print(res.json()["results"])
<?php
$query = http_build_query(["address" => "東京都千代田区丸の内"]);
$ch = curl_init("https://api.example.jp/api/v1/search?$query");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["x-api-key: YOUR_KEY"]);
$body = curl_exec($ch);
curl_close($ch);
$data = json_decode($body, true);
print_r($data["results"]);
require "net/http"
require "json"
require "uri"
uri = URI("https://api.example.jp/api/v1/search")
uri.query = URI.encode_www_form(address: "東京都千代田区丸の内")
req = Net::HTTP::Get.new(uri)
req["x-api-key"] = "YOUR_KEY"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
puts JSON.parse(res.body)["results"]
package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.example.jp/api/v1/search")
q := u.Query()
q.Set("address", "東京都千代田区丸の内")
u.RawQuery = q.Encode()
req, _ := http.NewRequest("GET", u.String(), nil)
req.Header.Set("x-api-key", "YOUR_KEY")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
var data map[string]any
json.NewDecoder(res.Body).Decode(&data)
fmt.Println(data["results"])
}
MCP(AIエージェントから利用)
Claude や Cursor などのAIエージェントから、APIキーでツールとして直接呼び出せます(Model Context Protocol)。エンドポイントは https://api.example.jp/mcp、認証はAPIと同じ x-api-key ヘッダーです。提供ツールは住所→郵便番号の search_address と、郵便番号→住所の lookup_zipcode の2つです。利用はAPIと同じレート制限・課金で計上されます。
Claude Code(CLI) — YOUR_KEY を発行したAPIキーに置き換えてください。
claude mcp add address-to-zip \
--transport http \
--url https://api.example.jp/mcp \
--header "x-api-key: YOUR_KEY"Claude Desktop / Cursor(設定ファイル)
{
"mcpServers": {
"address-to-zip": {
"url": "https://api.example.jp/mcp",
"headers": { "x-api-key": "YOUR_KEY" }
}
}
}本サーバーは公式のMCP Registryに jp.addresstozip/address-to-zip として掲載されています。概要・接続方法はMCPサーバーのページにまとめています。
エラー
| HTTP | error | 意味と対処 |
|---|---|---|
| 400 | invalid_parameter | パラメータ不正。message に理由が入ります。 |
| 401 | unauthorized | キー未指定または無効。再発行した場合、旧キーは即時無効です。 |
| 403 | key_suspended | お支払いを確認できず一時停止中。Stripeポータルでお支払い方法を更新すると自動で復帰します。 |
| 403 | origin_not_allowed | ブラウザからの呼び出しで、Originが許可リストにありません(下記CORS参照)。 |
| 429 | rate_limited | レート制限超過。x-ratelimit-reset(unix秒)まで待って再試行してください。 |
| 503 | service_unavailable | 一時的な障害。retry-after 秒後に再試行してください。 |
レート制限
キーごとにレート制限があります。実際の上限値は、すべてのレスポンスに付く x-ratelimit-limit / remaining / reset ヘッダーで返します(実行時に参照してください)。月間の上限はありません。
CORS(ブラウザからの直接利用)
サーバーからの呼び出しに、オリジン制限はかかりません。許可オリジンの照合対象は、ブラウザが自動付与する Origin ヘッダーを持つリクエストだけです。推奨構成(自社サーバー経由でAPIを呼ぶ)であれば、オリジン登録は不要です。
ブラウザから直接呼び出す場合のみ、キー発行時に登録した許可オリジン(スキーム+ホスト+ポートの完全一致、最大10件)からのリクエストを受け付けます。未登録キーのブラウザ呼び出しは全て403です。許可オリジンの追加・変更はマイページからいつでも行えます(ワイルドカード https://*.example.com 対応)。
ライブ実行(登録不要)
サイト上の公開検索(10回/分)でAPIと同じ検索エンジンを試せます。
…仕様・提供条件
- データの正本は日本郵便の公式データ(毎月チェックし、更新があれば自動反映。更新日は
/api/v1/healthで公開)。 - SLA・稼働率保証はありません。ベストエフォートで提供します。
- 破壊的変更は新しいバージョンパス(
/api/v2/)で提供します。