OpenPOI API

日本全国のPOI検索API。Overture Maps と食品営業許可・届出オープンデータを統合した約337万件を検索する

APIを試す

本番APIをその場で叩く検索デモです。入力すると /v1/suggest の候補が下に出て、 Enter または候補の選択で確定検索(/v1/search)し、結果が地図にも表示されます。

地図を読み込み中…

概要

日本全国のPOI(Overture Maps 約249万件 + 全国の自治体が公開する食品営業許可・届出オープンデータ(Japan Food Facilities)約88万件、合計約337万件)を、キーワードと位置で検索する読み取り専用API。認証不要・CORS全オリジン許可。データのライセンスは元データの提供元ごとに異なり、利用時は出典表示が必要(各レコードの licenses / attributions を参照。JFF分の出典例: 出典:Japan Food Facilities(各自治体・厚生労働省のオープンデータを加工して作成))。提供元ごとの条件は license.url を参照。エンドポイントは /v1/ 配下でバージョニングされている(本仕様書自身の /openapi.json と MCP の /mcp はバージョンなしで固定。理由は各パスの説明を参照)。MCPエンドポイントは POST /mcp。

全国の食品営業許可・届出施設を、複数のオープンデータソースを統合したうえで キーワード・位置で検索できる読み取り専用APIです。 データソースは2つ(2026-09-20 実測件数):

ソース件数ライセンス
合計3,372,487 件
Overture Maps2,492,948 件CDLA-Permissive-2.0(Foursquare由来分はApache-2.0)
Japan Food Facilities(JFF)879,539 件CC BY 4.0系 + PDL1.0(自治体ごとに異なる)

同一施設が複数ソースに存在する場合は1レコード(クラスタ)に統合され、 licenses / attributions は統合元全員分の和集合になります(詳細は レスポンスの形)。

導入事例

このAPIを実際に使っているサービスです。

BA-SHARE

行ったお店や旅先の思い出を地図のピンに残して、URLひとつでシェアできる地図アプリです。

施設検索と入力補完(住所・お店の名前でのサジェスト)に、このAPIの /v1/search/v1/suggest を利用しています。

エンドポイント一覧

以下は openapi.json から自動生成しています(このセクションを見て型やパラメータが古いと感じたら、まず openapi.json の更新を疑ってください)。

GET /v1/suggest

入力途中のキーワードから候補を出す(入力補完)

検索ボックスに1文字ずつ入力しているあいだに呼ぶエンドポイント。GET /v1/search と違い、表記ゆれの吸収(全角半角・大文字小文字・ひらがなカタカナ)、複数語のAND判定、同一店舗の重複除去、並び替え(名前一致 > 前方一致 > 中心に近い > 精度が高い)をすべてサーバー側で終えた候補を返すため、呼び出し側は描画するだけでよい。探す範囲は2段階で、まず bbox(地図の表示範囲)の中を探し、0件のときだけ全国(名前・カナに一致するものだけ)へ広げる。どちらを使ったかは scope で分かる。2文字以下の語だけの入力は、範囲指定があるときのみ結果を返す(全国走査は入力補完には遅すぎるため)。

パラメータ

名前必須既定値説明
q string 任意 入力途中のキーワード。スペース区切りで複数語可(全語をANDで絞る)。施設名・カナ・都道府県・市区町村・住所を横断検索。省略時(空文字含む)は検索を行わず、`{ count: 0, scope: "view", suggestions: [] }` を返す(エラーにはならない)。
例: すたーば
bbox string 任意 地図の表示範囲「minLng,minLat,maxLng,maxLat」。まずこの中から候補を探す。
例: 139.6,35.5,139.9,35.8
center string 任意 地図中心「lng,lat」(経度が先)。近い順の並び替えに使う。bbox 省略時は radius と組み合わせて表示範囲を作る。
例: 139.75,35.66
radius integer 任意 50000 center からの半径(メートル)。bbox が無いときだけ使う。
limit integer 任意 8 返す候補の最大件数(1〜20にクランプ)。
fields enum(full, minimal) 任意 full "minimal" を指定すると、候補1件ごとの category/business_type/source/licenses/attributions を省いた軽量なレスポンス(MinimalSuggestion。licenses/attributions はレスポンス直下に1回だけ載る)を返す。未指定・"full"・不明な値はすべて従来どおりの完全なレスポンスになる(後方互換)。

レスポンス

  • 200 候補(そのまま一覧に出せる並び) — SuggestResponse
  • 400 クエリの実行エラー — Error

GET /

ランディング(目次JSON)

apex ドメインをブラウザで開いた人に検索結果の JSON が返るのを避けるための入口。検索結果ではなく、openapi.json へのリンクと主要エンドポイント一覧を返す。openapi.json/mcp だけバージョンを付けていないのに対し、検索・入力補完は将来の破壊的変更に備えて/v1/ 配下に置いている。

GET /openapi.json

OpenAPI 3.1 定義を返す

このページの生成元でもある OpenAPI 定義そのもの。servers は固定値ではなく、リクエストされたホストがそのつど埋め込まれる。ChatGPT の Custom GPT (Actions)やコーディングエージェントにクライアントを生成させる場合はこの URL をそのまま渡せる。

POST /mcp

MCP サーバー(Streamable HTTP・ステートレス)

MCP(Model Context Protocol)サーバー。JSON-RPC 2.0 のメッセージを1リクエスト1レスポンス(application/json)で処理し、セッションID の発行や GET の SSE ストリームは提供しない(仕様上許容される最小構成)。公開ツールは2つ: search_facilities(q・center_lng/center_lat・radius_m・bbox・limit で施設検索。GET /v1/search と同じ検索結果を返す)と dataset_info(データセットの概要・出典・関連URLを返す)。Claude Code なら claude mcp add --transport http japan-facilities {SearchApiUrl}mcp で追加できる。対応プロトコルバージョン: 2025-06-18 / 2025-03-26 / 2024-11-05。

レスポンスの形

以下は openapi.jsoncomponents.schemas から自動生成しています (実際のレスポンスと食い違っていると感じたら、まず openapi.json の更新を疑ってください)。

Facility

施設1件。1レコードは1件の営業許可・届出を表す(同一施設が業種違いで複数レコードになることがある)

名前必須説明
name string 任意 施設名
name_kana string 任意 施設名カナ
prefecture string 任意 都道府県
city string 任意 市区町村(正規化済み)
address string 任意 所在地
category string 任意 正規化カテゴリ(複数ソース統合後の統一語彙)。データ提供元でカテゴリ情報が乏しいレコードでは "unknown" になる
business_type string 任意 営業許可・届出の業種(例: 飲食店営業)。category と同値(後方互換のため残している)
lat number | string 任意 緯度(WGS84)。座標が無い施設は空文字
lng number | string 任意 経度(WGS84)。座標が無い施設は空文字
level integer | string | null 任意 ジオコーディング精度(1=都道府県 2=市区町村 3=町丁目 8=街区・地番。小さいほど大まか)
source string 任意 代表レコードの出所ソース識別子(例: "jff" / "overture")。複数ソースが統合された施設でも値は単一の文字列(配列ではない)
licenses array<string> 任意 出所元のライセンス一覧。複数ソースが統合された施設では和集合(重複除去済み)
attributions array<string> 任意 表示義務のある帰属表示の一覧。そのまま画面に表示すること。複数ソースが統合された施設では全ソース分を含む

SearchResponse

名前必須説明
count integer 必須 返した件数
results array<> 必須

Suggestion

入力補完の候補1件。表示(名前・住所)と地図移動(緯度経度)に必要な項目だけを持ち、座標が無い施設は含まれない

名前必須説明
name string 必須 施設名
address string 必須 住所(都道府県から始まる形にそろえてある。そのまま1行で表示できる)
prefecture string 任意 都道府県
city string 任意 市区町村(正規化済み)
category string 任意 正規化カテゴリ(複数ソース統合後の統一語彙)。データ提供元でカテゴリ情報が乏しいレコードでは "unknown" になる
business_type string 任意 営業許可・届出の業種(例: 飲食店営業)。category と同値(後方互換のため残している)
lat number 必須 緯度(WGS84)
lng number 必須 経度(WGS84)
level integer | null 任意 ジオコーディング精度(1=都道府県 2=市区町村 3=町丁目 8=街区・地番。不明は null)
source string 任意 代表レコードの出所ソース識別子(例: "jff" / "overture")。複数ソースが統合された施設でも値は単一の文字列(配列ではない)
licenses array<string> 任意 出所元のライセンス一覧。複数ソースが統合された施設では和集合(重複除去済み)
attributions array<string> 任意 表示義務のある帰属表示の一覧。そのまま画面に表示すること。複数ソースが統合された施設では全ソース分を含む

MinimalSuggestion

fields=minimal のときの候補1件。category/business_type/source/licenses/attributions を持たない(それらは SuggestResponse 直下の licenses/attributions を参照)

名前必須説明
name string 必須 施設名
address string 必須 住所(都道府県から始まる形にそろえてある。そのまま1行で表示できる)
prefecture string 任意 都道府県
city string 任意 市区町村(正規化済み)
lat number 必須 緯度(WGS84)
lng number 必須 経度(WGS84)
level integer | null 任意 ジオコーディング精度(1=都道府県 2=市区町村 3=町丁目 8=街区・地番。不明は null)

SuggestResponse

名前必須説明
count integer 必須 返した候補の件数
scope enum(view, nationwide) 必須 どの範囲で見つけたか。view = 指定された表示範囲の中、nationwide = 表示範囲で0件だったため全国へ広げた
suggestions array<> 必須 候補(良い順に並んでいる。呼び出し側での並び替えは不要)。fields=minimal のときは各要素が MinimalSuggestion になる。
licenses array<string> 任意 fields=minimal のときだけ存在する。返した suggestions 全件分のライセンス一覧(和集合・重複除去済み)
attributions array<string> 任意 fields=minimal のときだけ存在する。返した suggestions 全件分の帰属表示一覧(和集合・重複除去済み)。そのまま画面に1回だけ表示すること

Error

名前必須説明
error string 任意 エラーメッセージ
レスポンスに含まれるのは source(単数・代表ソースのみ)です。sources(複数形の配列)というフィールドは返しません。

実際に動く例

すべて本番 API(https://api.openpoiapi.com)に 2026-09-22 に実際に curl して 得た結果です。 そのままコピペして手元で実行できます(日本語クエリの回は、読みやすさのため # で始まる行に日本語そのままの形を添えていますが、これはシェルのコメントなので 2行まとめてコピペしても無視されます。実行される2行目は%エンコード済みです。 curl に日本語をそのまま渡すと、サーバー側がリクエストの時点で拒否して {"message":"Bad Request"} を返すため)。

キーワード検索(JFF 由来がヒットする例)

# curl 'https://api.openpoiapi.com/v1/search?q=スターバックス&limit=1'
curl 'https://api.openpoiapi.com/v1/search?q=%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%90%E3%83%83%E3%82%AF%E3%82%B9&limit=1'
{
  "count": 1,
  "results": [
    {
      "name": "1F スターバックスコーヒー",
      "name_kana": "",
      "prefecture": "東京都",
      "city": "立川市",
      "address": "東京都立川市曙町2丁目5番1号 伊勢丹立川店1F",
      "category": "restaurant",
      "business_type": "restaurant",
      "lat": 35.699078325,
      "lng": 139.413344581,
      "level": 8,
      "source": "jff",
      "licenses": [
        "CC BY 4.0"
      ],
      "attributions": [
        "東京都(保健医療局)食品関係営業許可台帳"
      ]
    }
  ]
}

キーワード検索(Overture 由来がヒットする例。Foursquare 由来で Apache-2.0 の NOTICE 表示が要る例も含む)

# curl 'https://api.openpoiapi.com/v1/search?q=書店&limit=3'
curl 'https://api.openpoiapi.com/v1/search?q=%E6%9B%B8%E5%BA%97&limit=3'
{
  "count": 3,
  "results": [
    {
      "name": "ABC書店",
      "name_kana": "",
      "prefecture": "",
      "city": "吾妻郡草津町",
      "address": "",
      "category": "retail_other",
      "business_type": "retail_other",
      "lat": 36.620447,
      "lng": 138.594097,
      "level": "",
      "source": "overture",
      "licenses": [
        "CDLA-Permissive-2.0"
      ],
      "attributions": [
        "Overture Maps Foundation, overturemaps.org"
      ]
    },
    {
      "name": "Alfred Tea Room 梅田蔦屋書店",
      "name_kana": "",
      "prefecture": "",
      "city": "大阪市北区",
      "address": "",
      "category": "restaurant",
      "business_type": "restaurant",
      "lat": 34.70309867,
      "lng": 135.49489556,
      "level": "",
      "source": "overture",
      "licenses": [
        "CDLA-Permissive-2.0"
      ],
      "attributions": [
        "Overture Maps Foundation, overturemaps.org"
      ]
    },
    {
      "name": "BAKERY&CHANDELIER Eccentric 九大伊都 蔦屋書店",
      "name_kana": "",
      "prefecture": "福岡県",
      "city": "福岡市",
      "address": "",
      "category": "bakery",
      "business_type": "bakery",
      "lat": 33.594428,
      "lng": 130.229758,
      "level": "",
      "source": "overture",
      "licenses": [
        "Apache-2.0"
      ],
      "attributions": [
        "Overture Maps Foundation, overturemaps.org / Copyright 2024 Foursquare Labs, Inc. (https://opensource.foursquare.com/places-notice-txt/)"
      ]
    }
  ]
}

複数ソースが統合されたクラスタの例(bbox 検索)

curl 'https://api.openpoiapi.com/v1/search?bbox=139.6828,35.6499,139.6830,35.6501&limit=20'

3件目「#chord_」は JFF と Overture の両方に登録があり1クラスタに統合された施設。licenses / attributions がそれぞれ2件(和集合)になっている。

{
  "count": 3,
  "results": [
    {
      "name": "串むすび・ひいな",
      "name_kana": "",
      "prefecture": "東京都",
      "city": "世田谷区",
      "address": "東京都世田谷区池尻三丁目4番2号 -",
      "category": "restaurant",
      "business_type": "restaurant",
      "lat": 35.649998728,
      "lng": 139.682888842,
      "level": 8,
      "source": "jff",
      "licenses": [
        "CC BY 4.0"
      ],
      "attributions": [
        "東京都世田谷区食品衛生営業許可施設"
      ]
    },
    {
      "name": "自律学習サカセル",
      "name_kana": "",
      "prefecture": "",
      "city": "世田谷区",
      "address": "",
      "category": "service_other",
      "business_type": "service_other",
      "lat": 35.65003499,
      "lng": 139.68286352,
      "level": "",
      "source": "overture",
      "licenses": [
        "CDLA-Permissive-2.0"
      ],
      "attributions": [
        "Overture Maps Foundation, overturemaps.org"
      ]
    },
    {
      "name": "#chord_",
      "name_kana": "",
      "prefecture": "東京都",
      "city": "世田谷区",
      "address": "東京都世田谷区池尻三丁目4番2号 SSビル B1F",
      "category": "restaurant",
      "business_type": "restaurant",
      "lat": 35.649998728,
      "lng": 139.682888842,
      "level": 8,
      "source": "jff",
      "licenses": [
        "CC BY 4.0",
        "CDLA-Permissive-2.0"
      ],
      "attributions": [
        "Overture Maps Foundation, overturemaps.org",
        "東京都世田谷区食品衛生営業許可施設"
      ]
    }
  ]
}

近傍検索(center + radius。東京駅周辺 300m、キーワードなし)

curl 'https://api.openpoiapi.com/v1/search?center=139.767052,35.681236&radius=300&limit=3'
{
  "count": 3,
  "results": [
    {
      "name": "Caffarel",
      "name_kana": "",
      "prefecture": "東京都",
      "city": "千代田区",
      "address": "",
      "category": "restaurant",
      "business_type": "restaurant",
      "lat": 35.68127703842544,
      "lng": 139.7670424591337,
      "level": "",
      "source": "overture",
      "licenses": [
        "Apache-2.0"
      ],
      "attributions": [
        "Overture Maps Foundation, overturemaps.org / Copyright 2024 Foursquare Labs, Inc. (https://opensource.foursquare.com/places-notice-txt/)"
      ]
    },
    {
      "name": "東京新幹線南乗換口店",
      "name_kana": "トウキョウシンカンセンミナミノリカエクチテン",
      "prefecture": "東京都",
      "city": "千代田区",
      "address": "東京都千代田区丸の内1-9-1JR東京駅構内",
      "category": "unknown",
      "business_type": "unknown",
      "lat": 35.681236,
      "lng": 139.767124,
      "level": "",
      "source": "jff",
      "licenses": [
        "公共データ利用規約(第1.0版, PDL1.0)"
      ],
      "attributions": [
        "厚生労働省 食品衛生申請等システム(オープンデータ)"
      ]
    },
    {
      "name": "成城石井武蔵小金井店(催事)",
      "name_kana": "セイジョウイシイムサシコガネイテン サイジ",
      "prefecture": "東京都",
      "city": "小金井市",
      "address": "東京都小金井市本町6-14-29 JR駅構内コンコース",
      "category": "unknown",
      "business_type": "unknown",
      "lat": 35.681236,
      "lng": 139.767124,
      "level": "",
      "source": "jff",
      "licenses": [
        "公共データ利用規約(第1.0版, PDL1.0)"
      ],
      "attributions": [
        "厚生労働省 食品衛生申請等システム(オープンデータ)"
      ]
    }
  ]
}

入力補完(/suggest)。3ソース統合クラスタが1位に来る例

# curl 'https://api.openpoiapi.com/v1/suggest?q=すたーば&bbox=139.6,35.5,139.9,35.8'
curl 'https://api.openpoiapi.com/v1/suggest?q=%E3%81%99%E3%81%9F%E3%83%BC%E3%81%B0&bbox=139.6,35.5,139.9,35.8'

1位「スターバックスコーヒー用賀店」は licenses / attributions がそれぞれ3件。厚労省データ・世田谷区データ・Overture の3系統が1クラスタに統合されている実例。

{
  "count": 8,
  "scope": "view",
  "suggestions": [
    {
      "name": "スターバックスコーヒー用賀店",
      "address": "東京都世田谷区瀬田五丁目39番22号 -",
      "prefecture": "東京都",
      "city": "世田谷区",
      "category": "restaurant",
      "business_type": "restaurant",
      "lat": 35.626406,
      "lng": 139.626422,
      "level": 8,
      "source": "jff",
      "licenses": [
        "CC BY 4.0",
        "CDLA-Permissive-2.0",
        "公共データ利用規約(第1.0版, PDL1.0)"
      ],
      "attributions": [
        "Overture Maps Foundation, overturemaps.org",
        "厚生労働省 食品衛生申請等システム(オープンデータ)",
        "東京都世田谷区食品衛生営業許可施設"
      ]
    },
    "… (他7件省略)"
  ]
}

利用上の注意(ライセンス)

レスポンスの attributions は、利用者側の画面に表示する義務があります。 クラスタが複数ソースを統合している場合は、 そのクラスタに含まれる全ソース分の attributions をすべて表示してください (一部だけを選んで表示するのは不可)。

データソースライセンス掲示義務
Overture Maps(Places テーマ)CDLA-Permissive-2.0出典表示(attributionsをそのまま画面に出せば足りる)
Overture Maps 内 Foursquare 由来分Apache-2.0NOTICE の掲示が必要("Copyright 2024 Foursquare Labs, Inc." を含む attributions をそのまま表示すること)
Japan Food Facilities(JFF)CC BY 4.0 系 + 公共データ利用規約(PDL1.0)が混在出典表示(自治体ごとにライセンス文言が異なるため、レコードごとの attributions をそのまま使うこと)

本APIは複数の出典データを統合するにあたり、名寄せ(正規化・重複排除)を行っています。 公共データ利用規約(PDL1.0)が対象コンテンツに求める「編集・加工を行ったこと及びその主体の記載」を含め、 コピー用の出典表示文・ライセンスごとの義務の詳細は 出典・ライセンスページにまとめています。

本サービスの利用規約・プライバシーポリシー・サポート窓口・稼働率(SLA)に関する方針は 利用規約・プライバシー・サポートページにまとめています。

エラーレスポンス

GET /v1/searchGET /v1/suggest はいずれも、内部で例外が発生した場合に HTTPステータス 400、ボディ { "error": "..." }(openapi.json の Error スキーマ)を返します。

実際に確認できた400の例

curl -i 'https://api.openpoiapi.com/v1/search?q=%00abc'

"q" にNULバイトを混ぜてクエリの構文が不正な状態を作ると再現する。通常のURLエンコード忘れや型の不一致(例: limit=abc)は例外にならず、既定値にフォールバックして 200 を返す。

HTTP/1.1 400
{
  "error": "unterminated string"
}

既知の制約

  • category / business_type の多くが "unknown"(実データで実測: 1,840,570件 / 全3,372,487件 ≈ 54.6%)。Overture 由来レコードで正規化カテゴリが未整備な語彙が多いため。