EDINET APIで何が取れるか早わかり
EDINET(金融庁の開示書類閲覧システム)は、上場企業の有価証券報告書から大量保有報告書、TOB(公開買付)の届出書までを一元的に公開している一次情報の宝庫です。APIも公開されていて、営業日ごとに提出された書類を丸ごと取得できます。ただし、実際に叩いてみると「書類種別コードの意味」「同じAPIなのに文字コードが2種類ある」「ブラウザから呼べない」といった、仕様書を通読しないと気づけない落とし穴がいくつもあります。このガイドでは、APIで何が取れるのか、どういう順序で辿るのかを整理した上で、実装で確実に踏む罠まで含めて最短で把握できるようにまとめました。
EDINET APIで取れるデータ
有価証券報告書・四半期報告書・半期報告書・臨時報告書といった定期開示に加え、大量保有報告書(5%ルール)、公開買付届出書(TOB)、自己株券買付状況報告書、内部統制報告書などが取得できます。上場企業が法定で提出する開示書類は、ほぼここに集約されていると考えて差し支えありません。更新は営業日ごと、書類が提出されるつど反映されます。
EDINET APIは2つのAPIで構成されています。「書類一覧API」で、ある日付に提出された書類のメタデータ一覧(誰が・何を・いつ出したか)を取得し、そこで得た書類管理番号(docID)を使って「書類取得API」で中身のファイルを引く、という二段構えです。いきなり中身を取ることはできず、必ず一覧を経由して docID を得る設計になっています。
利用にはAPIキー(Subscription-Key)の登録が必要です。無料で取得でき、リクエストURLのクエリパラメータとして毎回付与します。通信はTLS1.2以上が必須です。
書類一覧APIと書類取得APIの使い方
書類一覧APIのリクエストURLは `https://api.edinet-fsa.go.jp/api/v2/documents.json?date=<ファイル日付>&type=<取得情報>&Subscription-Key=<APIキー>` です。date は YYYY-MM-DD 形式で、1日単位で指定します。期間をまとめて取ることはできないため、複数日を見たい場合は日付を回してリクエストを繰り返す実装になります。
type には「メタデータのみ」と「提出書類一覧及びメタデータ」の2種類があり、実際に書類の一覧が欲しい場合は後者(type=2)を指定します。レスポンスはJSONで、results 配列の中に1件ずつ書類の情報(docID、提出者名 filerName、書類種別コード docTypeCode、書類概要 docDescription、提出日時 submitDateTime など)が入っています。
書類取得APIは `https://api.edinet-fsa.go.jp/api/v2/documents/<書類管理番号>?type=<必要書類>&Subscription-Key=<APIキー>` です。type=1 で提出本文書及び監査報告書(XBRL)、type=2 でPDF、type=3 で添付文書、type=5 でCSV(提出書類のXBRLデータをCSV形式に変換したもの)が取得できます。レスポンスは Content-Type: application/octet-stream のZIP形式で返るため、解凍してから中のファイルを読む必要があります。
注意点として、XBRLとCSVは常に取得できるわけではありません。書類一覧APIのレスポンスに含まれる「XBRL有無フラグ」「CSV有無フラグ」が1(あり)の書類でのみ取得可能です。フラグを確認せずに type=5 を叩くと、書類によっては取得に失敗します。
書類種別コード(docTypeCode)の読み方
どの書類かを判別する鍵が docTypeCode(書類種別コード)です。主なものを挙げると、120=有価証券報告書、130=訂正有価証券報告書、140=四半期報告書、160=半期報告書、180=臨時報告書、220=自己株券買付状況報告書、235=内部統制報告書となっています。
TOB(公開買付)関連は、240=公開買付届出書、250=訂正公開買付届出書、260=公開買付撤回届出書、270=公開買付報告書、290=意見表明報告書という並びです。250を「撤回」だと思い込むと取り違えるため注意してください。撤回は260です。
大量保有報告書は、350=大量保有報告書、360=訂正大量保有報告書です。コードの正式な一覧は仕様書の参考資料(4-1)に全件掲載されているので、実装前に一度目を通しておくと事故を防げます。
実装で必ずハマる3つの落とし穴
1つ目は、docTypeCode 350 の扱いです。5%ルールの開示には「大量保有報告書(新規に5%超を保有した時)」と「変更報告書(保有割合が1%以上増減した時)」の2種類がありますが、EDINET APIではこの両方が同じ docTypeCode=350 で返ってきます。両者を区別できるのは docDescription だけで、前者は「大量保有報告書」、後者は「変更報告書」という文字列が入ります。docTypeCode だけで新規保有を判定すると、変更報告書まで新規として拾ってしまいます。
そしてここが最大の罠です。「大量保有まわりの書類を集めよう」と考えて docDescription に「大量保有」が含まれるものを拾う、という実装をすると、変更報告書が1件も取れません。変更報告書の docDescription は「変更報告書」であって、「大量保有」の文字列を含まないからです。実データで数えると、2営業日分75件のうち「変更報告書」が51件を占めており、この絞り込みでは全体の3分の1しか拾えていませんでした。しかも残った中身は「大量保有報告書」(新規)と、360の「訂正報告書(大量保有報告書・変更報告書)」——後者は文字列に「大量保有」を含むため通ってしまう——という構成になり、最も件数の多い変更報告書だけが綺麗に消えます。件数が少なくても一応データが取れてしまうので、バグに気づきにくいのが厄介な点です。5%ルール関連を漏れなく取りたいなら、docDescription の部分一致ではなく docTypeCode が 350 か 360 かで絞り込んでください。
2つ目は、文字コードです。EDINETの周辺データは、同じシステムなのにファイルによって文字コードが異なります。会社名や証券コードを引くための「EDINETコード一覧」(ZIP配布のCSV)は cp932(Shift_JIS系)ですが、書類取得API type=5 で得られるZIP内のCSVは utf-16 です。どちらか片方の前提で実装すると、もう一方で文字化けするか例外で落ちます。両方を扱うコードでは、それぞれ明示的にエンコーディングを指定してください。
3つ目は、ブラウザから直接呼べないことです。仕様書に「EDINET APIではクロスドメインの通信を許可しません。ブラウザ上で動作するスクリプト(JavaScript等)を利用した通信は行えない」と明記されています。フロントエンドから直接fetchする構成は取れないため、サーバーサイドやバッチ処理から呼び、必要なら自前のAPIとして中継する設計が前提になります。
会社名・証券コードを解決する(EDINETコード一覧)
APIのレスポンスに入っているのは EDINETコード(提出者を識別する独自コード)であり、会社名や証券コードは直接は付いてきません。大量保有報告書であれば発行会社を示す issuerEdinetCode、TOB関連であれば対象会社を示す subjectEdinetCode が入っています。これを企業名や証券コードに変換するには、別途配布されている「EDINETコード一覧」を突き合わせる必要があります。
EDINETコード一覧は `https://disclosure2dl.edinet-fsa.go.jp/searchdocument/codelist/Edinetcode.zip` からZIPで取得できます。中のCSVには、EDINETコード・提出者名・証券コード・上場区分などが入っており、これで「上場企業だけに絞る」「証券コードを付ける」といった処理ができます。前述のとおりこのCSVは cp932 です。なお証券コードは末尾に0が付いた5桁で格納されているため、一般的な4桁の銘柄コードとして使う場合は先頭4桁を取り出します。
この一覧は毎回ダウンロードする必要はありません。企業の増減はゆっくりなので、ローカルにキャッシュして数日〜1週間ごとに取り直す程度で十分実用に耐えます。
リクエスト例と書類種別コード(docTypeCode)
EDINET API v2 は Subscription-Key が必要です。まず type=2 で指定日の提出書類一覧(メタデータのJSON)を取り、docID を得てから type=5 でXBRL(ZIP内CSV)を取得する二段構えです。書類の種別は docTypeCode で判別します。docDescription の文字列(例:「大量保有」)で絞ると、変更報告書の docDescription が「変更報告書」で『大量保有』を含まないため取りこぼす——これがこのAPI最大の罠です。
# 指定日の提出書類一覧(メタデータ)。type=2 でJSON
curl -s "https://api.edinet-fsa.go.jp/api/v2/documents.json?date=2026-07-15&type=2&Subscription-Key=$EDINET_API_KEY"
# 得られた docID で XBRL(ZIP内CSV) を取得。type=5
curl -s "https://api.edinet-fsa.go.jp/api/v2/documents/{docID}?type=5&Subscription-Key=$EDINET_API_KEY" -o doc.zip| コード | 書類 | 備考 |
|---|---|---|
| 120 | 有価証券報告書 | 本決算 |
| 140 | 四半期報告書 | (2024年に廃止) |
| 160 | 半期報告書 | |
| 350 | 大量保有報告書 | 新規・変更の両方。docDescriptionで絞ると変更報告書を取りこぼす |
| 360 | 訂正大量保有報告書 |
出典
元システムエンジニア。Web系アプリ開発6年+ソリューション9年、IT実務およそ15年。個人開発者として、政府オープンデータや各府省のAPIを実際に叩いて検証し、「何が取れるか」「実装時にどこで詰まるか」「どう活用するか」を一次検証にもとづいて記録しています。
運営者・検証方針について →