郵便番号API

郵便番号から住所を、住所から郵便番号を引けるAPIです。申込フォームで郵便番号を入れると住所欄が自動で埋まる、といった仕組みを手軽に作れます。

できること
郵便番号 → 住所(カナ付き)/ 都道府県 → 市区町村 → 町域の順に選んで郵便番号 / 事業所の個別番号 / 廃止された郵便番号の案内
費用・登録
無料・登録不要・APIキー不要(提供条件は利用状況で変わることがあります)
向いている用途
申込フォーム・会員登録・配送先の入力で、住所の入力を手伝う
気をつけること
止まらないことは保証していません。自動入力できなかったときは手で入力できるようにしてください。

データ: 日本郵便の郵便番号データ(版は /zip/v1/meta.json で確認できます)

はじめかた(3ステップ)

  1. ブラウザで開いてみる: https://api.shirugear.com/zip/v1/1000001.json を開くと、〒100-0001 の住所が返ります。URLの数字を調べたい郵便番号に変えるだけです。
  2. 見本をコピーする: 住所の自動入力の完成例を、自分のフォームに合わせて入力欄の id を書き換えて使います。
  3. 利用規約を確かめる: 利用規約をご確認ください。登録や申し込みは要りません。

いろいろな言語から呼ぶ

サーバー側のプログラムやコマンドからも、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ファイルで動きます。動く見本を開く(そのページを保存すれば、そのまま使えます)。

コードを見る(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データの版(何月の日本郵便データか)と件数

郵便番号から住所

応答の例

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丁目」のような全角数字など)は日本郵便のデータのままです。番地は地域の番号には含まれません。

住所の組み立て方

注記(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"
}

住所から郵便番号

都道府県 → 市区町村 → 町域 の順に選んでもらい、郵便番号を出す仕組みに使えます。

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"
}

エラー

うまくいかないときは、HTTPの状態コードと、次の形の JSON を返します。code は固定の値なので、プログラムで見分けるときはこれを使ってください(message は説明文で、言い回しが変わることがあります)。

{"error":{"status":404,"code":"zipcode_not_found","message":"この郵便番号は見つかりません。…"}}
状態codeいつ
400invalid_zipcode郵便番号の形が違う(ハイフン入り・桁違いなど)
400invalid_prefcode都道府県コードが2桁の数字でない
400invalid_jiscode市区町村のコードが5桁の数字でない
404zipcode_not_foundその郵便番号は存在しない(または2023年7月より前に廃止)
404prefcode_not_foundその都道府県コードは存在しない
404jiscode_not_foundその市区町村のコードは存在しない
404not_foundURLが違う
405method_not_allowedGET / HEAD 以外で呼んだ

通信できない・サーバーが止まっているときは、JSON が返らないことがあります。fetch の失敗(例外)も受け止めて、手で入力してもらう流れにしてください。

データの更新・キャッシュ・呼び出し回数

変更の方針と更新履歴

更新履歴

2026年11月1日
エラーの本文に code(エラーの種類)を追加。市区町村の一覧に prefecture_kana を追加。GET / HEAD 以外は 405 を返すように。型定義と OpenAPI の仕様を公開。
2026年11月1日
公開。

機械で読める仕様(型定義・OpenAPI)

用語の説明

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」と入れてお送りください。