---
title: REST で使う
description: https://api.fudoki.dev に JSON で問い合わせ、歳出の木のノードを検索・取得する。
---

ベース URL は `https://api.fudoki.dev` です。認証は要りません。財政データの応答は JSON、原典 PDF の中継は `application/pdf` で返します。応答はキャッシュさせません（`Cache-Control: no-store`）。

## 最初の問い合わせ

1. **団体と収録範囲を確かめる**

    ```bash
    curl 'https://api.fudoki.dev/v1/jurisdictions?name=%E6%AD%A6%E8%94%B5%E9%87%8E%E5%B8%82'
    ```

    `name`（団体名の部分一致。例は「武蔵野市」）か `code`（団体コード。6 桁でも、検査数字を除いた 5 桁でもよい）で絞ると、団体の 6 桁のコード・都道府県と、収録している年度・資料区分・会計とその原典が返ります。両方を渡すと AND です。絞らなければ全団体を団体コード順に返し、収録の無い団体は `coverage` が空です。

    収録範囲は明細があることを示すもので、その会計の全事業を収録し終えたことは保証しません。検索の `jurisdiction_code` は 6 桁だけを受け付ける（5 桁では 0 件になる）ので、ここで引いた 6 桁のコードを使ってください。

2. **列の説明を読む**

    ```bash
    curl https://api.fudoki.dev/v1/expenditure/columns
    ```

    列の意味、`where` で使える条件、金額を足すときの条件（`sum_rules`）、検索の入力の例が返ります。

3. **ノードを検索する**

    ```bash
    curl -X POST 'https://api.fudoki.dev/v1/expenditure/nodes:search' \
      -H 'Content-Type: application/json' \
      -d '{
        "document_kind": "settlement",
        "fiscal_year": { "min": 2025, "max": 2025 },
        "where": { "node_kind": { "eq": ["目"] }, "cofog_code": { "prefix": "10.4" } },
        "order_by": [{ "column": "amount_yen", "desc": true }],
        "page_size": 50
      }'
    ```

    `document_kind`（`settlement` は決算、`initial` は当初予算）と `fiscal_year` の範囲（西暦、5 年以内）が必須です。

4. **内訳を辿る**

    ```bash
    curl 'https://api.fudoki.dev/v1/expenditure/nodes/settlement/<node_id>'
    ```

    検索の応答の `node_id` を渡すと、そのノードと子を軸（`axis`）ごとに返します。

## 検索の条件

`where` は列名をキーにした条件で、列どうしは AND です。

| 列の型 | 使える条件 |
| --- | --- |
| string | `eq`・`not_eq`（100 個まで、`eq` は OR）、`prefix`・`suffix`・`contains`、`is_null` |
| integer | `eq`・`not_eq`（100 個まで、`eq` は OR）、`min`・`max`、`is_null` |
| number | `min`・`max`、`is_null` |
| boolean | `eq` |

列をまたぐ OR と NOT はないので、2 回に分けて問い合わせてください。`fiscal_year` の年数と条件の値の合計は 90 個までなので、`eq`・`not_eq` に入れられる値は実際にはこの合計で決まります。文字列の条件の値は 200 文字までです。

## ページング

検索と、ノード取得の子の一覧と、団体の一覧はページで返ります。応答の `next_page_token` が null でなければ、次の要求に `page_token` として渡します（ノード取得と団体の一覧では query に付けます）。`page_size` は 1〜1000（既定 100）、団体の一覧では 1〜100（既定 20）です。位置は 100,000 件目までなので、それより先が要るときは条件を絞ってください。

## 原典

応答の `origins` には、結果の行が指す原典（資料名・公開 URL・形式・SHA-256）が入ります。行の `origin_id` から引いてください。団体の一覧では、原典（`origin_id`・資料名・公開 URL・形式）は会計ごとに `coverage[].accounts[].origins` に入っています。

`GET /v1/origins/{origin_id}/pdf` で自治体の公開 PDF を表示用に中継します。任意 URL や query は指定できません。取得 URL は percent-encoding した `X-Origin-Url`、取得日時は ISO 8601 UTC の `X-Origin-Fetched-At` ヘッダーで返します。取り込み時の内容との一致は検査しません。保持期限と上限は [MCP の PDF 表示](/mcp#表で見るmcp-apps)を参照してください。

## エラー

エラーは `{"error": {"code": "...", "message": "..."}}` の形で返ります。主なものは次のとおりです。

| HTTP | code | 起きるとき |
| --- | --- | --- |
| 400 | `INVALID_ARGUMENT` | 入力が schema に合わない |
| 404 | `NOT_FOUND` | ノードや path が見つからない |
| 405 | `METHOD_NOT_ALLOWED` | 操作が受け付けないメソッドで送った |
| 413 | `PAYLOAD_TOO_LARGE` | body が 16 KiB を超える |
| 415 | `UNSUPPORTED_MEDIA_TYPE` | `Content-Type` が `application/json` でない |
| 429 | `PDF_UNAVAILABLE` | PDF 中継の頻度・保持件数の上限を超える |
| 502 | `PDF_UNAVAILABLE` | PDF を取得できない、形式が不正、32 MiBを超える |
| 504 | `PDF_UNAVAILABLE` | PDF の取得が20秒を超える |
| 503 | `UNAVAILABLE` | 提供を止めている |

各操作の入力と応答の詳細は [API リファレンス](/reference)にあります。
