郵便番号API
郵便番号から住所を、住所から郵便番号を引けるAPIです。申込フォームで郵便番号を入れると住所欄が自動で埋まる、といった仕組みを手軽に作れます。
- できること
- 郵便番号 → 住所(カナ付き)/ 都道府県 → 市区町村 → 町域の順に選んで郵便番号 / 事業所の個別番号 / 廃止された郵便番号の案内
- 費用・登録
- 無料・登録不要・APIキー不要(提供条件は利用状況で変わることがあります)
- 向いている用途
- 申込フォーム・会員登録・配送先の入力で、住所の入力を手伝う
- 気をつけること
- 止まらないことは保証していません。自動入力できなかったときは手で入力できるようにしてください。
データ: 日本郵便の郵便番号データ(版は /zip/v1/meta.json で確認できます)
はじめかた(3ステップ)
- ブラウザで開いてみる: https://api.shirugear.com/zip/v1/1000001.json を開くと、〒100-0001 の住所が返ります。URLの数字を調べたい郵便番号に変えるだけです。
- 見本をコピーする: 住所の自動入力の完成例を、自分のフォームに合わせて入力欄の id を書き換えて使います。
- 利用規約を確かめる: 利用規約をご確認ください。登録や申し込みは要りません。
いろいろな言語から呼ぶ
サーバー側のプログラムやコマンドからも、URLを開くだけで使えます。どの言語でも、見つからない郵便番号は HTTP 404 になります。
const res = await fetch("https://api.shirugear.com/zip/v1/1000001.json");
if (res.ok) {
const data = await res.json();
const r = data.results[0];
console.log(r.prefecture + r.city + (r.town ?? "")); // 東京都千代田区千代田
} else if (res.status === 404) {
console.log("この郵便番号は見つかりませんでした");
}curl -s https://api.shirugear.com/zip/v1/1000001.json
# 住所だけ取り出す(jq を使う場合)
curl -s https://api.shirugear.com/zip/v1/1000001.json \
| jq -r '.results[0] | .prefecture + .city + (.town // "")'<?php
$json = @file_get_contents('https://api.shirugear.com/zip/v1/1000001.json');
if ($json === false) {
// 404(見つからない)や通信の失敗のときは false になります
echo "見つからないか、つながりませんでした\n";
} else {
$data = json_decode($json, true);
$r = $data['results'][0];
echo $r['prefecture'] . $r['city'] . ($r['town'] ?? ''), "\n"; // 東京都千代田区千代田
}import json
import urllib.error
import urllib.request
url = "https://api.shirugear.com/zip/v1/1000001.json"
try:
with urllib.request.urlopen(url, timeout=10) as res:
data = json.load(res)
r = data["results"][0]
print(r["prefecture"] + r["city"] + (r["town"] or "")) # 東京都千代田区千代田
except urllib.error.HTTPError as e:
if e.code == 404:
print("この郵便番号は見つかりませんでした")その場で試す
郵便番号から住所
試しに:
住所から郵便番号
住所の自動入力の完成例
郵便番号を7桁入れた時点で、都道府県・市区町村・町域を自動で入れるフォームです。1つのHTMLファイルで動きます。動く見本を開く(そのページを保存すれば、そのまま使えます)。
- 全角数字・ハイフン・「〒」が混じっていても、数字7桁にそろえてから呼びます。
- 見つからない・通信できない・廃止された番号のときは、その旨を表示して手で入力してもらいます。
- 1つの郵便番号に町域がいくつもあるときは、町域を入れずに利用者に任せます(どれかを勝手に選ばない)。
- 事業所・私書箱の番号のときは、番地まで入れます。
- 一度調べた番号は覚えておき、同じ番号で何度も呼びません。
- フレームワークや jQuery は要りません。WordPress や Contact Form 7 のフォームでも、入力欄の id を合わせれば使えます。
コードを見る(HTML+JavaScript)
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>住所の自動入力の見本|郵便番号API|シルギア API</title>
<meta name="description" content="シルギアの郵便番号APIを使って、郵便番号を入れると住所欄が自動で埋まるフォームの見本です。このページのHTMLをそのまま保存して使えます。" />
<link rel="canonical" href="https://api.shirugear.com/zip/example/" />
<style>
body { font-family: system-ui, sans-serif; max-width: 520px; margin: 24px auto; padding: 0 16px; line-height: 1.7; }
label { display: block; margin: 12px 0 0; font-weight: 600; }
input { display: block; width: 100%; box-sizing: border-box; font: inherit; padding: 8px; margin-top: 4px; border: 1px solid #8a94a6; border-radius: 6px; }
#zip { max-width: 10em; }
#zip-msg { min-height: 1.7em; margin: 4px 0 0; color: #3b4a5c; font-size: 14px; }
</style>
</head>
<body>
<h1>住所の自動入力の見本</h1>
<p>郵便番号を7桁入れると、都道府県・市区町村・町域が自動で入ります(<a href="https://api.shirugear.com/zip/">郵便番号APIの説明</a>)。</p>
<form>
<label for="zip">郵便番号</label>
<input id="zip" name="zip" inputmode="numeric" autocomplete="postal-code" placeholder="100-0001" />
<p id="zip-msg" aria-live="polite"></p>
<label for="pref">都道府県</label>
<input id="pref" name="pref" autocomplete="address-level1" />
<label for="city">市区町村</label>
<input id="city" name="city" autocomplete="address-level2" />
<label for="addr1">町域・番地</label>
<input id="addr1" name="addr1" autocomplete="address-line1" />
</form>
<script>
// ===== ここから: 郵便番号から住所を自動で入れる =====
const API = "https://api.shirugear.com/zip/v1/";
const memo = new Map(); // 一度調べた番号は覚えておき、同じ番号で何度も呼ばない
// 全角数字を半角にし、ハイフン・空白・〒などを取り除く(「〒100-0001」→「1000001」)
function normalizeZip(value) {
return value
.replace(/[0-9]/g, (c) => String.fromCharCode(c.charCodeAt(0) - 0xfee0))
.replace(/\D/g, "");
}
// 郵便番号の情報を取る。見つからなければ null。通信できなければ例外。
async function lookupZip(zip) {
if (memo.has(zip)) return memo.get(zip);
const res = await fetch(API + zip + ".json");
if (res.status === 404) {
memo.set(zip, null);
return null;
}
if (!res.ok) throw new Error("HTTP " + res.status);
const data = await res.json();
memo.set(zip, data);
return data;
}
const el = (id) => document.getElementById(id);
const say = (text) => { el("zip-msg").textContent = text; };
el("zip").addEventListener("input", async () => {
const zip = normalizeZip(el("zip").value);
if (zip.length !== 7) {
say("");
return;
}
say("住所を調べています…");
let data;
try {
data = await lookupZip(zip);
} catch (e) {
say("住所を自動で入れられませんでした。お手数ですが直接入力してください。");
return;
}
if (normalizeZip(el("zip").value) !== zip) return; // 調べている間に入力が変わった
if (!data) {
say("この郵便番号は見つかりませんでした。番号をご確認いただくか、住所を直接入力してください。");
return;
}
if (data.abolished) {
const a = data.abolished;
const month = a.month.slice(0, 4) + "年" + Number(a.month.slice(5)) + "月";
say("この郵便番号は" + month + "に廃止されました。" +
(a.new_zipcodes.length ? "新しい郵便番号: " + a.new_zipcodes.join("、") : "住所を直接入力してください。"));
return;
}
const list = data.results;
const first = list[0];
const sameCity = list.every((r) => r.jiscode === first.jiscode);
const samePref = list.every((r) => r.prefcode === first.prefcode);
el("pref").value = samePref ? first.prefecture : "";
el("city").value = sameCity ? first.city : "";
if (list.length > 1) {
// 1つの番号に町域がいくつもある。どれかは決められないので、町域は入れない
el("addr1").value = "";
say("この郵便番号には町域が複数あります。町域から入力してください。");
} else if (first.kind === "area") {
// 「以下に掲載がない場合」などは town が空。そのときは町域を入れない
el("addr1").value = first.town;
say(first.town ? "続けて番地を入力してください。" : "町域から入力してください。");
} else {
// 事業所・私書箱の個別番号は、番地まで決まっている
el("addr1").value = first.town + first.street;
say(first.office_name + " の郵便番号です。");
}
});
// ===== ここまで =====
</script>
</body>
</html>
URLの一覧
どれも、URLを開く(GET)だけで JSON(UTF-8)が返ります。先頭は https://api.shirugear.com です。自分のサイトのJavaScriptから直接呼べます(CORS対応)。
| URL | 返すもの |
|---|---|
/zip/v1/{郵便番号7桁}.json | その郵便番号の住所(複数あればすべて)。例: /zip/v1/1000001.json |
/zip/v1/pref/{都道府県コード2桁}.json | その都道府県の市区町村の一覧。例: /zip/v1/pref/13.json(東京都) |
/zip/v1/city/{市区町村のコード5桁}.json | その市区町村の町域と郵便番号の一覧。例: /zip/v1/city/13101.json(千代田区) |
/zip/v1/meta.json | データの版(何月の日本郵便データか)と件数 |
- 郵便番号はハイフンを付けずに半角数字7桁で指定します。
- 都道府県コードは
01(北海道)〜47(沖縄県)です。例: 東京都13、大阪府27。 - 市区町村のコード(全国地方公共団体コード)は、都道府県の一覧の
jiscodeで分かります。 - 呼び出しは
GET(またはHEAD)だけです。独自のヘッダを付けずに呼んでください。
郵便番号から住所
応答の例
GET https://api.shirugear.com/zip/v1/1000001.json
{
"zipcode": "1000001",
"results": [
{
"kind": "area",
"prefcode": "13",
"jiscode": "13101",
"prefecture": "東京都",
"prefecture_kana": "トウキョウト",
"city": "千代田区",
"city_kana": "チヨダク",
"town": "千代田",
"town_kana": "チヨダ",
"note": null,
"street": null,
"office_name": null,
"office_name_kana": null,
"post_office": null
}
],
"abolished": null,
"data_version": "2026-10"
}
results の各項目
results は「地域の番号 → 事業所の番号」の順に並びます。1つの郵便番号に町域が複数ある場合は、複数件入ります(全国で約1,300の番号)。
項目の一覧を開く(14項目)
| 項目 | 型 | 内容 |
|---|---|---|
kind | 文字列 | area(地域の番号)/office(大口事業所の個別番号)/pobox(私書箱) |
prefcode | 文字列 | 都道府県コード(2桁) |
jiscode | 文字列 | 市区町村のコード(全国地方公共団体コード・5桁) |
prefecture | 文字列 | 都道府県名 |
prefecture_kana | 文字列/null | 都道府県名のカナ(全角カタカナ)。事業所の番号でまれに null |
city | 文字列 | 市区町村名(郡を含む。例: 「南佐久郡南相木村」) |
city_kana | 文字列/null | 市区町村名のカナ。事業所の番号でまれに null |
town | 文字列 | 町域名(「千代田」「大通西」など、町名の部分)。町域が決まらない番号では ""(空文字)。高層ビルの番号ではビル名を含みます(例: 「大手町JAビル」) |
town_kana | 文字列/null | 町域名のカナ。全角数字を含むことがあります(例: 「キタ1ジョウニシ」)。town が空なら空文字。事業所の番号で分からなければ null |
note | 文字列/null | 町域の注記(下の表)。無ければ null。事業所の番号では常に null |
street | 文字列/null | 番地以降(事業所・私書箱のみ。地域の番号では null) |
office_name | 文字列/null | 事業所名(事業所・私書箱のみ) |
office_name_kana | 文字列/null | 事業所名のカナ。「(カブ)」や全角の空白を含み、小さい「ャ」なども大きい字のままです(日本郵便のデータのとおり) |
post_office | 文字列/null | 取り扱う郵便局(事業所・私書箱のみ) |
住所の表記(「6丁目」のような全角数字など)は日本郵便のデータのままです。番地は地域の番号には含まれません。
住所の組み立て方
- ふつうは
prefecture+city+town(例: 東京都+千代田区+千代田)。続きの番地は利用者に入力してもらいます。 townが空のとき(「以下に掲載がない場合」など)は、都道府県と市区町村だけを入れ、町域から利用者に入力してもらいます。- results が2件以上のときは、どの町域かは郵便番号だけでは決まりません。町域は入れずに利用者に任せるか、候補から選んでもらいます。まれに市区町村もまたがるので(全国で約130の番号)、市区町村が全件で同じときだけ入れます。
kindがoffice/poboxのときはtown+streetまで入れられます。事業所名はoffice_nameです。
注記(note)の種類と扱い
注記は案内のための情報です。ふつうは住所欄に入れず、必要なら画面にヒントとして出してください。
注記の種類の一覧を開く(7種類)
| 注記の例 | 意味 | 住所欄には |
|---|---|---|
| 以下に掲載がない場合 | その市区町村で、ほかの郵便番号に当てはまらない地域(town は空) | 町域を入れない |
| ◯◯の次に番地がくる場合 | 町名が無く、市区町村の次に番地が来る地域(town は空) | 町域を入れない |
| ◯◯村一円 | その市区町村の全体が1つの番号(town は空) | 町域を入れない |
| 1〜19丁目、35〜38、41、42丁目 | 同じ町域のうち、この番号が使われる範囲 | 入れない(丁目は番地と一緒に利用者が入力) |
| 次のビルを除く | 同じ町域のうち、高層ビルは別の番号 | 入れない |
| 1階、地階・階層不明 | 高層ビルの階ごとの番号(town はビル名を含む) | 階を入れてもよい |
| 河原町通二条上る など | 京都の通り名による住所表記 | 入れなくても届く(入れてもよい) |
廃止された郵便番号
廃止された郵便番号を指定すると、results を空にして、abolished に廃止された年月・廃止前の住所・移った先の番号を返します(HTTP 200)。
GET https://api.shirugear.com/zip/v1/3994501.json
{
"zipcode": "3994501",
"results": [],
"abolished": {
"month": "2025-01",
"previous": [
{ "kind": "area", "prefecture": "長野県", "city": "伊那市", "town": "西箕輪", "office_name": null }
],
"new_zipcodes": ["3960041"]
},
"data_version": "2026-10"
}
- 対象は、日本郵便が差分データを配布している 2023年7月(事業所の番号は2023年10月)以降に廃止された番号です。それより前に廃止された番号は、存在しない番号と同じく 404 になります。
new_zipcodesは、同じ月に同じ町域(事業所は同じ名前)へ足された番号からの推定です。分からなければ空の配列です。
住所から郵便番号
都道府県 → 市区町村 → 町域 の順に選んでもらい、郵便番号を出す仕組みに使えます。
1. 都道府県の市区町村の一覧
GET https://api.shirugear.com/zip/v1/pref/13.json
{
"prefcode": "13",
"prefecture": "東京都",
"prefecture_kana": "トウキョウト",
"cities": [
{ "jiscode": "13101", "city": "千代田区", "city_kana": "チヨダク" },
{ "jiscode": "13102", "city": "中央区", "city_kana": "チュウオウク" },
…
],
"data_version": "2026-10"
}
cities は市区町村のコードの順です。
2. 市区町村の町域と郵便番号の一覧
GET https://api.shirugear.com/zip/v1/city/13101.json
{
"jiscode": "13101",
"prefcode": "13",
"prefecture": "東京都",
"prefecture_kana": "トウキョウト",
"city": "千代田区",
"city_kana": "チヨダク",
"towns": [
{ "zipcode": "1000000", "town": "", "town_kana": "", "note": "以下に掲載がない場合" },
{ "zipcode": "1020072", "town": "飯田橋", "town_kana": "イイダバシ", "note": null },
…
],
"data_version": "2026-10"
}
townsは日本郵便のデータの並び(おおむね町域のカナ順。「以下に掲載がない場合」が先頭)です。- 同じ町域名が、注記で分かれて別の番号で何度も出ることがあります(大きな町域・高層ビルなど)。
- 一覧に入るのは地域の番号だけで、事業所の番号は入りません。
エラー
うまくいかないときは、HTTPの状態コードと、次の形の JSON を返します。code は固定の値なので、プログラムで見分けるときはこれを使ってください(message は説明文で、言い回しが変わることがあります)。
{"error":{"status":404,"code":"zipcode_not_found","message":"この郵便番号は見つかりません。…"}}
| 状態 | code | いつ |
|---|---|---|
| 400 | invalid_zipcode | 郵便番号の形が違う(ハイフン入り・桁違いなど) |
| 400 | invalid_prefcode | 都道府県コードが2桁の数字でない |
| 400 | invalid_jiscode | 市区町村のコードが5桁の数字でない |
| 404 | zipcode_not_found | その郵便番号は存在しない(または2023年7月より前に廃止) |
| 404 | prefcode_not_found | その都道府県コードは存在しない |
| 404 | jiscode_not_found | その市区町村のコードは存在しない |
| 404 | not_found | URLが違う |
| 405 | method_not_allowed | GET / HEAD 以外で呼んだ |
通信できない・サーバーが止まっているときは、JSON が返らないことがあります。fetch の失敗(例外)も受け止めて、手で入力してもらう流れにしてください。
データの更新・キャッシュ・呼び出し回数
- 出典: 日本郵便株式会社が公開している郵便番号データ(住所の郵便番号・事業所の個別郵便番号・月ごとの差分)。
- 更新: 日本郵便のデータは月1回(月末ごろ)更新されます。毎日 4:40(日本時間)ごろに更新を確かめ、変わっていれば作り直します。
- データの版(
data_version): 取り込んだ日本郵便の月次データの年月です(例:"2026-10"は2026年10月に公開された更新まで反映済み)。/zip/v1/meta.jsonには、作った日時(built_at・UTC)と件数も入っています。 - キャッシュ: 応答は1日(エラーは1時間)キャッシュしてかまいません。データを作り直したあと最大1日ほどは、新しい版と古い版の応答が混ざることがあります。
ETag/Last-Modifiedに対応しているので、変わっていなければ 304 が返ります。 - 呼び出し回数の目安: 決まった上限はありませんが、1つの利用元から1秒あたり10回程度までにしてください。郵便番号の入力1回につき1回呼ぶ使い方なら問題ありません。同じ番号の結果は使い回してください。
- 全件をまとめて使いたいとき: 一件ずつ大量に取らず、日本郵便が配布しているデータを直接お使いください。なお
/zip/v1/bundle.jsonはシルギアの郵便番号ツール専用の全件ファイルで、形式は予告なく変わります(上の互換の約束の対象外です)。
変更の方針と更新履歴
- v1 の中では、項目を足すことはあっても、今ある項目の名前や意味は変えません。知らない項目が増えていても無視するように作ってください。
- 互換性のない変更は、URLの版を分けて(
/zip/v2/など)行います。v1 を終わらせるときは、できるかぎり6か月以上前にこのページでお知らせします。 - 提供条件(無料・登録不要・アクセス回数の上限など)は、利用状況に応じて変えることがあります(利用規約第4条)。
更新履歴
- 2026年11月1日
- エラーの本文に
code(エラーの種類)を追加。市区町村の一覧にprefecture_kanaを追加。GET / HEAD 以外は 405 を返すように。型定義と OpenAPI の仕様を公開。 - 2026年11月1日
- 公開。
機械で読める仕様(型定義・OpenAPI)
- TypeScript の型定義:
/zip/types.d.ts - OpenAPI 3.1:
/zip/openapi.json(コード生成やテストに使えます)
用語の説明
- API
- プログラムから呼び出して使う窓口のことです。このAPIは、URLを開くと結果がデータ(JSON)で返ります。
- JSON
- プログラムで扱いやすいデータの書き方です。JavaScript ではそのままオブジェクトとして使えます。
- CORS対応
- ほかのサイト(あなたのサイト)のページのJavaScriptから、このAPIを直接呼び出せるという意味です。サーバー側のプログラムは要りません。
- 町域
- 住所のうち、市区町村の次にくる町名の部分です(「千代田」「大通西」など)。番地は含みません。
- 都道府県コード
- 都道府県を表す2桁の番号です(JIS X 0401)。北海道が 01、東京都が 13、沖縄県が 47 です。
- 全国地方公共団体コード
- 市区町村を表す番号です。このAPIでは先頭5桁(都道府県コード2桁+市区町村3桁)を使います。例: 千代田区 13101。
- 大口事業所の個別番号
- 郵便物が多い会社・役所などに、日本郵便が個別に割り当てている郵便番号です。番地まで1つに決まります。
よくある質問
本当に無料ですか?登録は必要ですか?
現在は無料で、登録やAPIキーも要りません。個人・法人、営利・非営利を問わず使えます。ただし利用状況に応じて提供条件を変えることがあり、そのときはできるかぎりこのページでお知らせします。
会社の申込フォームや会員登録で使えますか?
使えます。郵便番号を入れると住所欄が自動で埋まる仕組みに向いています。完成例をそのまま使えます。
APIが止まったら、フォームはどうなりますか?
止まらないことは保証していません。住所欄は自動入力のあとでも手で直せるようにし、自動入力できなかったときは手で入力してもらう作りにしてください。完成例はその作りになっています。
WordPress や Contact Form 7 でも使えますか?
使えます。フォームのページに完成例のJavaScript(<script> の部分)を置き、zip・pref・city・addr1 の id をフォームの入力欄に合わせて書き換えてください。
利用者の個人情報が送られますか?
このAPIに送られるのは郵便番号(7桁の数字)だけです。氏名や住所の残りの部分は送られません。
アクセス数に上限はありますか?
決まった上限はありませんが、目安として1つの利用元から1秒あたり10回程度までにしてください。郵便番号の入力1回につき1回呼ぶ使い方なら問題ありません。
データはどれくらい新しいですか?
日本郵便が月1回公開する更新を、毎日確かめて取り込んでいます。今の版は /zip/v1/meta.json の data_version で分かります。最新で正確な情報は日本郵便の郵便番号検索でご確認ください。
動いている見本はありますか?
このページの完成例のほか、同じデータを使ったシルギアの郵便番号⇔住所の変換ツールもあります。
ご利用にあたって
ご利用の前に利用規約をご確認ください。データの正確さや、止まらないことは保証していません。ご質問・不具合のご連絡は、シルギアのお問い合わせ窓口から、件名に「API」と入れてお送りください。