EDINET APIとは?使い方を徹底解説【サンプルコード付き】

この記事でわかること

  • EDINET APIとは何か
  • APIキーの取得方法
  • 書類一覧APIの使い方
  • 書類取得API(PDF)の使い方
  • Google Apps Scriptでの実装例

この記事の対象読者

  • EDINET APIを初めて使う方
  • 有価証券報告書を自動取得したい方
  • 上場企業の開示情報をプログラムで扱いたい方
  • Google Apps Script(GAS)で業務自動化したい方

EDINET APIとは

概要

EDINET(Electronic Disclosure for Investors’ NETwork) は、金融庁が運営する「金融商品取引法に基づく有価証券報告書等の開示書類に関する電子開示システム」です。

EDINET APIは、このEDINETのデータをプログラムから取得できる公式APIです。

項目内容
提供元金融庁
料金無料
取得できる情報有価証券報告書、四半期報告書、大量保有報告書など
対象企業全上場企業(約4,000社)

何ができるのか

EDINET APIを使うと、以下のことができます。

機能説明
書類一覧の取得指定した日付に提出された書類の一覧を取得
書類の取得特定の書類(PDF、XBRL等)をダウンロード
企業情報の取得EDINETコードから企業情報を取得

どんな時に使うのか

  • 特定企業の有価証券報告書を定期的に取得したい
  • 全上場企業の開示情報を一括収集したい
  • 財務データをXBRL形式で取得して分析したい
  • IR情報の監視を自動化したい

事前準備:APIキーの取得

EDINET APIを使用するには、APIキーが必要です。

取得手順

STEP 1:EDINETにアクセス

EDINET にアクセスします。

STEP 2:ユーザー登録

トップページの「API利用についてはこちら」または「新規登録」からユーザー登録を行います。

STEP 3:メール認証

登録したメールアドレスに届く認証メールのリンクをクリックします。

STEP 4:APIキー発行

ログイン後、マイページから「APIキー発行」を行います。

注意事項

項目内容
利用制限一定時間内のリクエスト数に制限あり
利用規約EDINET利用規約に同意が必要
APIキーの管理第三者に漏洩しないよう注意

API仕様の概要

エンドポイント

EDINET APIのベースURLは以下の通りです。

https://api.edinet-fsa.go.jp/api/v2/

主要なAPI

APIエンドポイント用途
書類一覧API/documents.json指定日の書類一覧を取得
書類取得API/documents/{docID}特定書類をダウンロード

共通パラメータ

パラメータ必須説明
Subscription-KeyAPIキー

書類一覧API の使い方

概要

指定した日付に提出された書類の一覧を取得します。

リクエスト

GET https://api.edinet-fsa.go.jp/api/v2/documents.json

パラメータ

パラメータ必須説明
date提出日(YYYY-MM-DD形式)2024-06-25
type取得情報(1:メタデータ、2:提出書類一覧)2
Subscription-KeyAPIキーxxxxx

レスポンス例

json

{
  "metadata": {
    "title": "提出された書類を把握するためのAPI",
    "status": "200",
    "message": "OK"
  },
  "results": [
    {
      "docID": "S100ABCD",
      "edinetCode": "E12345",
      "secCode": "7203",
      "filerName": "トヨタ自動車株式会社",
      "docDescription": "有価証券報告書",
      "docTypeCode": "120",
      "submitDateTime": "2024-06-25 09:00",
      "periodStart": "2023-04-01",
      "periodEnd": "2024-03-31"
    },
    ...
  ]
}

主なレスポンス項目

項目説明
docID書類ID(PDFダウンロード時に使用)
edinetCode企業のEDINETコード
secCode証券コード
filerName提出者名(企業名)
docDescription書類の説明
docTypeCode書類種別コード(120=有価証券報告書)
submitDateTime提出日時
periodStart対象期間の開始日
periodEnd対象期間の終了日

docTypeCode(書類種別コード)一覧

コード書類種別
120有価証券報告書
130訂正有価証券報告書
140四半期報告書
150訂正四半期報告書
160半期報告書
350大量保有報告書

書類取得API の使い方

概要

書類一覧APIで取得したdocIDを使って、実際の書類(PDF等)をダウンロードします。

リクエスト

GET https://api.edinet-fsa.go.jp/api/v2/documents/{docID}

パラメータ

パラメータ必須説明
docID書類ID(URLパス)S100ABCD
type取得形式(1:ZIP、2:PDF、3:添付、4:英文)2
Subscription-KeyAPIキーxxxxx

type パラメータの詳細

type取得形式説明
1ZIP提出書類及び監査報告書(XBRL含む)
2PDF提出書類及び監査報告書(PDF形式)
3ZIP添付文書
4ZIP英文ファイル

レスポンス

  • type=2(PDF)の場合:PDFファイルのバイナリデータ
  • type=1,3,4(ZIP)の場合:ZIPファイルのバイナリデータ

サンプルコード

Python での実装例

書類一覧の取得

python

import requests

API_KEY = "your_api_key_here"
BASE_URL = "https://api.edinet-fsa.go.jp/api/v2"

def get_documents(date):
    """指定日の書類一覧を取得"""
    url = f"{BASE_URL}/documents.json"
    params = {
        "date": date,
        "type": 2,
        "Subscription-Key": API_KEY
    }
    
    response = requests.get(url, params=params)
    
    if response.status_code == 200:
        return response.json()
    else:
        print(f"Error: {response.status_code}")
        return None

# 使用例
result = get_documents("2024-06-25")

if result and "results" in result:
    for doc in result["results"]:
        # 有価証券報告書(docTypeCode=120)のみ表示
        if doc.get("docTypeCode") == "120":
            print(f"{doc['filerName']}: {doc['docID']}")

PDFのダウンロード

python

def download_pdf(doc_id, save_path):
    """書類IDを指定してPDFをダウンロード"""
    url = f"{BASE_URL}/documents/{doc_id}"
    params = {
        "type": 2,  # PDF形式
        "Subscription-Key": API_KEY
    }
    
    response = requests.get(url, params=params)
    
    if response.status_code == 200:
        with open(save_path, "wb") as f:
            f.write(response.content)
        print(f"Downloaded: {save_path}")
        return True
    else:
        print(f"Error: {response.status_code}")
        return False

# 使用例
download_pdf("S100ABCD", "toyota_2024.pdf")

Google Apps Script(GAS)での実装例

書類一覧の取得

javascript

const API_KEY = "your_api_key_here";
const BASE_URL = "https://api.edinet-fsa.go.jp/api/v2";

/**
 * 指定日の書類一覧を取得
 */
function getDocuments(date) {
  const url = `${BASE_URL}/documents.json?date=${date}&type=2&Subscription-Key=${API_KEY}`;
  
  const response = UrlFetchApp.fetch(url, {
    method: "get",
    muteHttpExceptions: true
  });
  
  const code = response.getResponseCode();
  
  if (code === 200) {
    return JSON.parse(response.getContentText());
  } else {
    console.log(`Error: ${code}`);
    return null;
  }
}

/**
 * 有価証券報告書のみ抽出
 */
function getSecuritiesReports(date) {
  const result = getDocuments(date);
  
  if (!result || !result.results) {
    return [];
  }
  
  // docTypeCode=120 が有価証券報告書
  return result.results.filter(doc => doc.docTypeCode === "120");
}

// 使用例
function test() {
  const reports = getSecuritiesReports("2024-06-25");
  
  reports.forEach(doc => {
    console.log(`${doc.filerName}: ${doc.docID}`);
  });
}

PDFのダウンロードとGoogle Driveへの保存

javascript

/**
 * PDFをダウンロードしてGoogle Driveに保存
 */
function downloadPdfToDrive(docId, fileName, folderId) {
  const url = `${BASE_URL}/documents/${docId}?type=2&Subscription-Key=${API_KEY}`;
  
  const response = UrlFetchApp.fetch(url, {
    method: "get",
    muteHttpExceptions: true
  });
  
  const code = response.getResponseCode();
  
  if (code === 200) {
    const blob = response.getBlob().setName(fileName);
    const folder = DriveApp.getFolderById(folderId);
    const file = folder.createFile(blob);
    
    console.log(`Saved: ${file.getUrl()}`);
    return file.getUrl();
  } else {
    console.log(`Error: ${code}`);
    return null;
  }
}

// 使用例
function testDownload() {
  const docId = "S100ABCD";
  const fileName = "トヨタ自動車_2024_有価証券報告書.pdf";
  const folderId = "your_folder_id_here";
  
  downloadPdfToDrive(docId, fileName, folderId);
}

特定企業の有価証券報告書を検索

javascript

/**
 * 特定企業の有価証券報告書を日付範囲で検索
 */
function searchCompanyReport(edinetCode, startDate, endDate) {
  const start = new Date(startDate);
  const end = new Date(endDate);
  const results = [];
  
  // 日付をループ
  for (let d = new Date(start); d <= end; d.setDate(d.getDate() + 1)) {
    const dateStr = Utilities.formatDate(d, "JST", "yyyy-MM-dd");
    const docs = getDocuments(dateStr);
    
    if (!docs || !docs.results) continue;
    
    // 指定企業の有価証券報告書を検索
    const found = docs.results.find(doc => 
      doc.edinetCode === edinetCode && doc.docTypeCode === "120"
    );
    
    if (found) {
      results.push(found);
    }
    
    // API制限対策:1リクエストごとに少し待機
    Utilities.sleep(500);
  }
  
  return results;
}

// 使用例:トヨタ自動車(E02144)の報告書を検索
function testSearch() {
  const reports = searchCompanyReport("E02144", "2024-06-01", "2024-06-30");
  
  reports.forEach(doc => {
    console.log(`${doc.submitDateTime}: ${doc.docDescription}`);
  });
}

エラーハンドリング

よくあるエラーと対処法

HTTPステータス原因対処法
400パラメータ不正パラメータの形式を確認
401認証エラーAPIキーを確認
404書類が存在しないdocIDを確認
429リクエスト過多時間を空けてリトライ
500サーバーエラー時間を空けてリトライ

エラーハンドリングの実装例(GAS)

javascript

/**
 * エラーハンドリング付きAPI呼び出し
 */
function callApiWithRetry(url, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    const response = UrlFetchApp.fetch(url, {
      method: "get",
      muteHttpExceptions: true
    });
    
    const code = response.getResponseCode();
    
    if (code === 200) {
      return { success: true, data: JSON.parse(response.getContentText()) };
    }
    
    if (code === 429) {
      // レート制限:60分待機
      console.log("Rate limited. Waiting 60 minutes...");
      Utilities.sleep(60 * 60 * 1000);
      continue;
    }
    
    if (code >= 500) {
      // サーバーエラー:少し待ってリトライ
      console.log(`Server error (${code}). Retrying in 10 seconds...`);
      Utilities.sleep(10 * 1000);
      continue;
    }
    
    // その他のエラー
    return { success: false, error: code };
  }
  
  return { success: false, error: "Max retries exceeded" };
}

実用Tips

1. 日付をループして書類を取得

有価証券報告書は特定の日にまとめて提出されるわけではないため、日付をループして検索する必要があります。

javascript

/**
 * 期間内の全ての有価証券報告書を取得
 */
function getAllReportsInPeriod(startDate, endDate) {
  const reports = [];
  const start = new Date(startDate);
  const end = new Date(endDate);
  
  for (let d = new Date(start); d <= end; d.setDate(d.getDate() + 1)) {
    const dateStr = Utilities.formatDate(d, "JST", "yyyy-MM-dd");
    const result = getDocuments(dateStr);
    
    if (result && result.results) {
      const dailyReports = result.results.filter(doc => doc.docTypeCode === "120");
      reports.push(...dailyReports);
    }
    
    Utilities.sleep(500); // API制限対策
  }
  
  return reports;
}

2. 証券コードから企業を検索

javascript

/**
 * 証券コードで企業を検索
 */
function findBySecCode(reports, secCode) {
  return reports.filter(doc => doc.secCode === secCode);
}

3. 業種でフィルタリング

書類一覧APIでは業種情報は直接取得できないため、別途EDINETコードリスト(CSV)を使用します。

EDINETコードリストのダウンロード

まとめ

EDINET APIでできること

機能説明
書類一覧取得指定日の提出書類を一覧取得
PDF取得有価証券報告書等のPDFをダウンロード
XBRL取得財務データをXBRL形式で取得

ポイント

  • 無料で利用可能(登録必要)
  • 全上場企業の開示書類を取得可能
  • APIキーの取得が必要
  • リクエスト制限があるため、適切な待機時間を設定

活用例

  • 有価証券報告書の自動収集システム
  • 財務データの自動分析
  • IR情報の監視・アラート
  • 競合企業の動向調査

関連記事

もっと詳しく知りたい方へ

「EDINET APIを使った自動化システムを作りたい」 「自社の業務に合わせたカスタマイズがしたい」

そのようなご要望があれば、お気軽にご相談ください。

AIDXの仕組みを社内で内製化したい方へ

スパルタAIDX研修で、現場で使えるAI実践スキルを短期集中で習得できます。
ベテランの技術継承や業務自動化を自社で実現したい方におすすめです。

AIDXの仕組みを構築を依頼したい方へ

貴社の課題に合わせた最適なソリューションをご提案いたします。
導入事例の詳細や、具体的な実装方法についてもお気軽にご相談ください。

CONTACT

資料請求・お問い合わせはこちらから

お気軽にご連絡ください