メインコンテンツへスキップ

Era API

Era APIの利用可能なエンドポイント、認証ヘッダー、ページネーション、制限について解説します。

最終更新:2026年9月5日

まだベータ版です

これらのエンドポイントは今日時点で動作しますが、APIはまだ発展途上であり、一部の詳細は変わる可能性があります。このページが最後に更新された日時は、ページ上部の最終更新日で確認できます。

クイックスタート

始める前に、Eraのアカウントと、少なくとも1つの金融機関の接続が必要です。接続がないと、これらのエンドポイントは返すものがありません。

  1. 1

    Eraにサインインし、まだなら金融機関を接続します。

  2. 2

    ダッシュボードのAPIキーを開いてキーを作成します。スコープは最初からすべてチェックが入っているので、要らないものを外してください。これらのエンドポイントに残すのはbanking:readです。有効期限も選びます。無期限という選択肢はありません。

  3. 3

    キーをコピーします。表示は一度だけで、再表示はできません。コピーしてシークレットマネージャーなど安全な場所に保管してください。キーを紛失した場合、二度と表示できません。代わりに新しいキーを作成してください。

  4. 4

    リクエストのヘッダーに載せて送ります。

cURL

curl "https://forge.era.app/api/banking/transactions?page=1&pageSize=20" \
  -H "X-API-Key: fmk_your_key_here"

レスポンス · 200

{
  "transactions": [],
  "pagination": {
    "currentPage": 1,
    "pageSize": 20,
    "totalItems": 412,
    "totalPages": 21
  },
  "historyWindowApplied": true,
  "historyWindowFloorDate": "2026-06-28",
  "historyWindowHiddenCount": 137,
  "historyWindowEarliestDate": "2024-03-02",
  "historyWindowDegraded": false
}

認証

キーは次のいずれかの方法で送ってください:

認証方法
方法認証情報
ヘッダーX-API-Key: fmk_your_key_here
ベアラートークンAuthorization: Bearer fmk_your_key_here

すべてのリクエストはTLSで暗号化されます。

キーには有効期限があり、作るときにどれくらいで切れるかを選びます。最長は無料プランで90日、有料プランで365日です。無期限という選択肢はないので、これを使って作るものには、期限が来る前にキーを入れ替える段取りが要ります。

レスポンスヘッダー

リクエストIDはすべてのレスポンスに付きます。レート制限ヘッダーはEraが計測した呼び出しに付きます。Eraが利用状況を計測できない場合は、呼び出しをそのまま処理し、これらのヘッダーは一切送りません。

レスポンスヘッダー
ヘッダー説明
fly-request-id

リクエストを一意に識別するIDです。特定のリクエストについてサポートに連絡する際はこれを伝えてください。参照: リクエストID

X-RateLimit-Limit

プランの1日の予算です。

X-RateLimit-Remaining

1日の予算の残りです。ゼロを下回ることはありません。

X-RateLimit-Reset

1日の予算で次のリクエストが空く時刻を、Unix時間の秒で示します。1分あたりのバースト上限に専用のヘッダーはありません。参照: 制限

Retry-After429のみ

リクエストを拒否した上限に基づく、再試行までに待つ秒数です。参照: 制限

エラー

このAPIが返すエラーのステータスコードは次のとおりです:

  • 400

    不正な入力: パラメータの誤り、空または100件を超える一括更新、あるいは同じ呼び出しで同じフィールドを設定と解除の両方を行う書き込み。

  • 401

    キーがない、または解析できないキー。X-API-Keyヘッダーかベアラートークンとして送ってください。

  • 402

    プランのクォータに引っかかっています — 現時点ではカテゴリ作成にのみ当てはまります。呼び出す速さではなく、何を作るかの話なので、待っても解消せず、上位プランなら解消します。呼び出しが速すぎる場合は、代わりに429になります。

  • 403

    キーがこの呼び出しに必要なスコープを持っていない — または、二つの取引書き込みのいずれかで、idが他人のものか、そもそも存在しない場合。APIはこの二つを区別しません。

  • 404

    存在しない口座です。返すのは残高エンドポイントだけで、どの口座も指していない accountGroupKey や、そもそもキーの形をしていない値は、ボディなしの404で返ります。取引が404を返すことはありません — 403を参照してください。

  • 409

    書き込み中に別の何かがその行を変更しました。もう一度読み込んで、もう一度書き込んでください。

  • 429

    リクエストが多すぎます。1日の予算を使い切ったか、1分あたりのバースト上限に達しました。待つ時間はRetry-Afterでわかり、402とは違い、こちらは待てば解消します。どの上限で拒否されたかとプランごとの数値は、制限の節を参照してください。

エラーの形

ほとんどのエラーは同じ形で返ります: statusCode、message、そして何が問題だったかを示すerrorsオブジェクトです。すべてではありません。401と404は本文なしで返るので、本文より先にステータスを読んでください。

{
  "statusCode": 403,
  "message": "One or more errors occurred!",
  "errors": {
    "generalErrors": ["Transaction does not belong to the authenticated user"]
  }
}

リクエストID

すべてのレスポンスにはfly-request-idヘッダーが付きます。特定のリクエストについてサポートに連絡する際はこれを伝えてください。

cURL

# Print the response headers, including fly-request-id; discard the body
curl -sS -D - -o /dev/null "https://forge.era.app/api/banking/transactions?page=1&pageSize=20" \
  -H "X-API-Key: fmk_your_key_here"

cURL(書き込み呼び出し)

# A write call: same header, plus a JSON body
curl -sS -D - -X PUT "https://forge.era.app/api/banking/transactions/utgr_your_transaction_id" \
  -H "X-API-Key: fmk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"categoryKey": "fcat_dining", "merchantName": "Corner Cafe"}'

よくあるエラー

  • 同じ書き込みでフィールドを設定と解除の両方を行う — 400。

  • 一括更新で100件を超えるid — 400、何も変更されません。1件未満も同様です。

  • 自分のものではない、あるいは存在しない取引 — 403、404にはなりません。つまりレスポンスは、そのidが存在するかどうかを決して教えず、ただ「あなたのものではない」とだけ伝えます。

  • 他の何かが先にその行を変更した — 409。

制限

ドキュメント化された10のエンドポイントのうち2つは、1回の呼び出しでリクエストできる量に上限があります。残りの8つにはありません。

上限がないからといって無制限というわけではありません: キーには引き続き有効期限があり、書き込みには引き続きフィールド長の制限があり、カテゴリの作成はプランのクォータに達することがあり、プランによっては古い履歴が引き続き隠されることがあります。これらはいずれもレート制限ではありません — 下記を参照してください。

  • アカウント、残高、サマリー、カテゴリとタグの一覧、カテゴリの作成、タグの作成、そして単一トランザクションの書き込みには、呼び出しごとの量的な上限がありません。指定したセット全体、または指定した1行がそのまま返されます。

  • pageSizeは拒否ではなく100に切り詰められます。それ以上を要求しても、200とともに100件が返ってきます — 送った値を信じるのではなく、レスポンスのpagination.pageSizeを読んでください。

  • 取引の一括書き込みは100件のidに制限されており、pageSizeと違って切り詰めではなく拒否されます: 101件送ると400が返り、何も変更されません。

  • キーは作成時に選んだスケジュールで期限切れになります — 無料プランで最大90日、有料プランで365日です。無期限のオプションはありません。

  • プランによっては、古い取引を隠す履歴ウィンドウの下限が適用されることがあります。取引のレスポンスには、下限が適用されたかどうかとその位置を示すhistoryWindowフィールドが含まれます。

レート制限

どのプランでもこのAPIを呼び出せますが、どのプランも使用量が計測されます。数えられるのは、キーを使ったあなたの呼び出しです。1日の予算と1分あたりのバースト上限という2つの上限が同時に適用され、どちらかを超えると429が返ります。

1日の予算はキーではなく、あなたに紐づきます。アカウント内のすべてのRESTキーが同じ1日の予算を共有するので、キーをもう1本作っても呼び出せる回数は増えません。MCPツールの呼び出しは別枠で計測されるため、一方を使っても、もう一方は減りません。

プラン別の1日あたり・1分あたりのリクエスト数
プラン1日あたり1分あたり
Basic

250

30

Organize

1,000

30

Automate

10,000

60

Operate

25,000

120

Eraが呼び出しを計測した場合、レスポンスにはX-RateLimit-Limit、X-RateLimit-Remaining、X-RateLimit-Resetが付きます。3つとも1日の予算についての値です。この予算は深夜0時にリセットされるのではなく、24時間単位で順に戻ります: 古い呼び出しが24時間を経過するたびに、リクエストが1件ずつ戻ってきます。1分あたりのバースト上限にはヘッダーがないので、表の数値をもとに自分でペースを調整してください。Remainingがゼロを大きく上回っていても、バーストが429で返ってくることがあります。Eraが利用状況を計測できない場合は、呼び出しをそのまま処理し、レート制限ヘッダーは送りません。ヘッダーがないときはエラーではなく、計測値が欠けているものとして扱ってください。

429が伝えること

problem-details形式のボディです。detailフィールドは構造化されたフィールドではなく、プレーンテキストです: 達した上限、その上限で許される量、次のリクエストが空く時刻、そして上限を引き上げるプラン(すでに最上位ならその旨)が書かれています。解析はしないでください。コードで分岐するにはヘッダーを読みます: Remainingが0なら1日の予算で拒否され、0より大きければ1分あたりのバースト上限で拒否されています。

429レスポンス

{
  "type": "https://httpstatuses.com/429",
  "title": "Too Many Requests",
  "status": 429,
  "detail": "You've used up your daily budget of 250 requests. Your next request frees up at 2026-09-16T09:00:00Z. The Organize plan raises it."
}

429にはRetry-Afterも付きます。拒否した上限を基準にした秒数の整数で、1分あたりのバースト上限なら最大1分、1日の予算なら最大24時間です。拒否された呼び出しは何も消費しないので、早めに再試行しても損はありませんが、また429が返ります。Retry-Afterが経過すると空くのはリクエスト1件分で、予算全体ではありません。それを送ってから、ヘッダーか次のRetry-Afterを読んでください。

これらは、見失ったキーを守ってはくれません。漏えいしたキーは、あなた自身とまったく同じようにあなたの予算を消費します。キーに不安があれば、失効させてください。詳しくは下のセキュリティとキーの扱いを参照してください。

共通の決まり

レスポンスのフィールドはcamelCaseです。クエリパラメータは大文字と小文字を区別しないので、こちらもcamelCaseで通ります。公開している仕様書ではPascalCaseで書かれているため、両方の書き方を見かけることになります。

暦の上の一日を指すフィールドはYYYY-MM-DDです。ある瞬間を指すフィールドは、オフセット付きのISO 8601です。

ページの大きさは、はねつけられるのではなく丸められます。pageSizeに500を指定しても、返るのは100件と200であって、エラーではありません。送った値を信じるのではなく、pagination.pageSizeを読み返してください。

レスポンスには、このページに載っていないフィールドが入っていることがあります。知らないものはエラーにせず読み飛ばしてください。そうしておけば、APIが広がっても手元のクライアントは動き続けます。

RESTは素のHTTPなので、呼び出すのにSDKは要りません。HTTPクライアントのある言語ならどれでも大丈夫です。インストールするものはありません。

バージョンと変更

このページに書かれているものはすべて、この方針の対象です。

パスにバージョン番号はなく、バージョン用のヘッダーもありません。各エンドポイントで動いているバージョンはひとつで、それがここに書かれているものです。

予告なく変えることがあるもの

どれも、上の規約に沿ったクライアントを壊しません。

  • エンドポイントを追加する、または既存のものに操作を追加する。

  • レスポンスにフィールドを追加する。

  • 任意のパラメータを追加する。指定しなければ何も変わらない。

  • 決まった選択肢に値を追加する。ステータスや種別など。

  • レスポンスヘッダーを追加する。

予告なく変えないもの

どれも動いているクライアントを壊しうるものです。

  • エンドポイントをなくす、またはパスやメソッドを変える。

  • レスポンスのフィールドをなくす、または名前を変える。

  • フィールドの型や意味を変える。

  • 今は任意のパラメータを必須にする。

  • 今は受け付けている入力を拒否する。

  • エンドポイントに必要なスコープを変える。

これらの変更を行う前には、少なくとも90日前に変更履歴でお知らせし、何を変更すべきかをお伝えします。今動いているものは、それまで動き続けます。

変更は変更履歴でお知らせします。リンクは下の「変更履歴」セクションにあります。メールやフィードはまだないので、APIに対する作業を計画するときはそちらをご確認ください。

APIがベータのあいだ、書かれている範囲は広がり続けます。すでにここにあるものが、予告なく壊れることはありません。

変更履歴

Era Developer Platform(Era APIを含む)の更新を、新しい順に。上の方針は何をどれだけ前に予告するかを定めるもので、変更履歴はその予告が載る場所です。

変更履歴を開く

セキュリティとキーの扱い

エージェントを承認するとキーが一つ作られます

OAuthでエージェントを承認すると、EraはそのためのAPIキーを作ります。自分で作ったキーと同じダッシュボードの一覧に、クライアント自身の名前からEraが組み立てた名前で並びます。

名前の付き方

Auto -- Claude

その画面で承認したスコープをそのまま持ち、それ以外は持ちません。ダッシュボードから失効させると、再度承認するまでエージェントは新しいアクセス権を得られません。すでに持っているトークンは有効期限まで使え、その期限は最長1時間です。

書き込みはアクティビティログに残り、読み取りは残りません

キーの作成と失効はどちらもアクティビティログに残り、エージェントがMCPで行うツール呼び出しもすべて残ります。RESTの書き込みも残ります——タグを作成した、取引を編集したといった変更として記録されます。RESTの読み取りはエントリを一切作りません。これらのエントリはどのプランでも記録されますが、ログ全体を読むにはOrganize以上が必要です。それ未満では直近のエントリだけが見えます。書き込みであっても、RESTにリクエスト単位のログはありません。残るのは変更であって呼び出しではなく、その変更はそれを行ったキーではなくアカウントに紐づきます。

キーに不安を感じたら、失効させてください。自分で作成したキーは、次のリクエストからRESTとMCPの両方で使えなくなります。エージェントのキーはただちに新しいアクセス権を得られなくなり、すでに持っているトークンも1時間以内に失効します。作り直しにかかるのは1分です。

キーに頼る前に知っておきたいこと。
項目意味
スコープは粗い

banking:readはこのページの六つの読み取りよりずっと広い範囲を読みます。同じスコープがアカウントの残りの読み取り、つまり残高、保有資産、接続、支出までカバーします。スコープはこれひとつ、これより狭い選択肢はありません。 書き込み系のスコープも、読み取り系と同じく選択肢に入っています——キーはあなたのアカウントとして動くので、パスワードと同じように扱ってください。口座の一部ではなく、アカウント全体として動きます。 banking:writeが変更・管理できるのはカテゴリ、タグ、取引のメタデータに加えて、手動アカウントと残高、そして金融機関の接続・解除です — このページのどのスコープも、あなたの銀行口座間でお金を動かすことはできません。

スコープは更新されない

キーのスコープは作成時に決まり、あとから変わることはありません。これは、スコープに含まれてはいてもまだ使えないものについて効いてきます。今日social:writeを渡せば、共有ビューが使えるようになった日にもそのキーはそれを持ったままです。今使うものだけを渡し、いつか使うかもしれないものは渡さないでください。

承認は不要

あなたはすでに自分のアカウントにサインインしているので、キーの作成にほかの人の承認は要りません。審査も順番待ちもなく、Eraの誰かが申請を承認することもありません。作成した瞬間にアクティビティログへ記録されるので、身に覚えのないキーはすぐに気づけます。

銀行のログイン情報には届かない

キーは銀行のログイン情報に届きません。Eraがそれを持っていないからです。入力するのはデータ提供事業者が用意した接続画面で、Eraの画面ではありません。Eraが後に保持するのは接続ごとのアクセストークンだけで、AES-256で暗号化されて保存され、金融機関の接続を解除すれば捨てられます。

保存されるのはハッシュのみ

キーは256ビットのランダムなデータで、保存前にSHA-256でハッシュ化されます。手元に残るのはハッシュであってキーではありません。紛失したら失効させて作り直してください。

主なリソース

口座

GET/banking/accounts

必要なスコープ

banking:read

接続済みの金融機関をまたいで、見えている口座をすべて返します。外してある口座の件数も一緒に付きます。どの口座にも、残高のエンドポイントがパスで受け取る値であるaccountGroupKeyと、その口座が属するconnectionIdが入っているので、まずはこの呼び出しから始めてください。connectionIdで一つの接続に絞り込め、includeExcludedで自分が隠した口座も含められます。

クエリパラメータ
connectionId任意

一つの接続の口座だけに絞り込みます。

includeExcluded任意

tier除外や非表示の口座も含め、残高を難読化して返します。デフォルトはfalseです。

レスポンス · 200

{
  "accounts": [
    {
      "accountGroupKey": "uagr_7f3c9a21",
      "connectionId": "ucon_4b19e02c",
      "name": "Everyday Checking",
      "currentBalance": 4820.16,
      "supportsTransactions": true,

    }
  ],
  "excludedAccountCount": 1
}

自分が隠した口座や、プランの対象外になっている口座では、残高のフィールドはゼロではなくnullで返ります。nullは「空」ではなく「伏せてある」という意味です。supportsTransactionsのnullも同じ考え方で、Eraには言えないという意味であって、答えが「いいえ」だという意味では決してありません。

口座の残高

GET/banking/accounts/{accountId}/balance

必要なスコープ

banking:read

One account's balance, with the credit fields filled in when the account is a liability. The path takes that account's accountGroupKey — the same value /banking/accounts returns for it. The key is not checked for shape before the lookup, so a malformed key and an unknown one answer the same way.

レスポンス · 200

{
  "accountGroupKey": "uagr_7f3c9a21",
  "currentBalance": 4820.16,
  "availableBalance": 4712.03,
  "creditLimit": null,
  "currencyCode": "USD",
  "availableCredit": null,
  "asOf": "2026-08-11T09:32:00Z",
  "visibility": null
}

隠した口座も、接続が切れた口座も、返ってくるのは200のままで、残高のフィールドがnullになります。404は、その口座が本当に存在しないか、キーがキーの形をしていなかったことを意味します。ここではvisibilityのフィールドに注意してください。口座が見えているときはnull、見えていないときはtier_excludedのような文字列が入ります。

口座のまとめ

GET/banking/accounts/summary

必要なスコープ

banking:read

見えている口座の合計です。totalAssets、totalLiabilities、そして前者から後者を引いたnetWorthHintが入ります。パラメータはありません。

レスポンス · 200

{
  "userId": "7d1c0b93a8e24f60",
  "accounts": [],
  "totalVisibleCount": 6,
  "totalHiddenCount": 2,
  "totalAssets": 48210.75,
  "totalLiabilities": 9327.40,
  "netWorthHint": 38883.35,
  "computedAt": "2026-08-11T09:32:00Z"
}

netWorthHintが数えるのはこのレスポンスに入っている口座だけなので、何が抜けているかはtotalHiddenCountが教えてくれます。確定した純資産ではなく、出発点の数字として扱ってください。

取引

GET/banking/transactions

必要なスコープ

banking:read

取引を1ページずつ、ページ数の情報と一緒に包んで返します。pageとpageSize(上限は100)を受け取り、口座、期間、適用済みルール、付与済みタグでの絞り込みも指定できます。

クエリパラメータ
accountId任意

一つの口座の取引に絞り込みます。その口座のaccountGroupKeyで指定します。

fromDate任意

この日付以降の取引だけを返します。

toDate任意

この日付以前の取引だけを返します。

page任意

ページ番号。1から始まります。デフォルトは1です。

pageSize任意

1ページあたりの件数。デフォルトは50で、100までに制限されます。

sortBy任意

並べ替えるフィールド:transactionDate、amount、description、category、merchantNameのいずれか。

sortDirection任意

ascまたはdesc。デフォルトは降順です。

categoryKeys任意

Only transactions in these categories, by their fcat_ keys. Takes a list, not a single key, and a transaction matches if its effective category is any one of them. Send the literal "uncategorized" to select the transactions that have no category at all.

search任意

加盟店名、説明、カテゴリ、口座名、金額を対象にした全文検索です。

ruleIds任意

自動化ルールが適用された取引だけに絞り込みます。ルールのキーで指定します。

tagKeys任意

指定したタグのいずれかが付いた取引だけに絞り込みます。

reviewStatuses任意

needs_review、reviewed、flaggedのいずれかです。複数指定でき、レビュー状態がそのいずれかに一致する取引が返されます。

includeChildren任意

With a category filter set, also include transactions in the subcategories of every key you passed. Defaults to false.

includePending任意

過去7日間の保留中の取引も返します。isPending が付きます。デフォルトはfalseです。保留中の行は読み取り専用です。

レスポンス · 200

{
  "transactions": [],
  "pagination": {
    "currentPage": 1,
    "pageSize": 20,
    "totalItems": 412,
    "totalPages": 21
  },
  "historyWindowApplied": true,
  "historyWindowFloorDate": "2026-06-28",
  "historyWindowHiddenCount": 137,
  "historyWindowEarliestDate": "2024-03-02",
  "historyWindowDegraded": false
}

プランによっては履歴ウィンドウの境目が適用され、それより古い取引は隠れます。レスポンスにhistoryWindowのフィールドが並んでいるのはそのためです。historyWindowAppliedは境目が実際に何かを隠したことを示し、historyWindowFloorDateはその境目の位置、historyWindowHiddenCountは後ろに何件あるか、historyWindowEarliestDateは履歴が実際にどこまで遡れるかを示します。これがないと、件数が少ない結果は「それ以上古い取引がない口座」と見分けがつきません。このうち二つは書くコードを左右します。historyWindowHiddenCountは境目が適用されていてもnullになることがあるので、nullはゼロではなく「不明」として読んでください。historyWindowDegradedがtrueのときは、その読み取りでEraがプランを確認できていないため、境目の日付は事実ではなく推測です。プランを確認できた有料の読み取りでは境目は適用されず、historyWindowAppliedはfalseで返ります。

プランは1日に使えるリクエスト数も定めており、このAPIはそれを実際に適用します。プランごとの数値、すべてのレスポンスに付くヘッダー、そして429が伝えることは、いずれも制限の節にまとめています。

取引を一件変更する

取引のうち、自分で上書きできるのは四つです。カテゴリ、加盟店名、自分で付けるメモ、そしてレビューステータス。変更するものだけを送ってください——省略した項目はそのままです。パスのidは、その取引のutgr_キーです。データを変更するので、banking:readではなくbanking:writeが必要です。

PUT/banking/transactions/{id}

必要なスコープ

banking:write
リクエストボディ
categoryKey任意

割り当てるカテゴリのfcat_キー。省略すると、取引は今のカテゴリのままです。

merchantName任意

自分で付ける加盟店名。最大1000文字。省略すると、今の名前のままです。

description任意

この取引に自分で付けるメモ。最大5000文字。省略すると、今のメモのままです。

clearCategory任意

カテゴリの上書きを外し、Era自身の分類に戻します。デフォルトはfalseです。

clearMerchantName任意

加盟店名の上書きを外し、銀行から届いた名前に戻します。デフォルトはfalseです。

clearDescription任意

メモの上書きを外し、銀行から届いた説明に戻します。デフォルトはfalseです。

reviewStatus任意

needs_review、reviewed、flaggedのいずれかを付けます。

clearReviewStatus任意

レビューステータスの上書きを外します。デフォルトはfalseです。

レスポンス · 200

{
  "transaction": {}
}

更新された取引がまるごと返ります。形は上の一覧が返すものと同じです——ここでは繰り返して載せていません、大きなオブジェクトでまだ変わり続けているためです。同じ呼び出しの中でフィールドを設定しつつ同時にクリアすると400が返ります。自分のものではない取引、あるいはそもそも存在しない取引は403が返ります——このAPIは両者を区別しません。書き込んでいる間に別の何かが同じ行を変更していた場合は409が返ります。読み直してから、もう一度送ってください。

一度に100件まで変更する

同じ四つの上書きを、一度の呼び出しで複数の取引のリストに適用します。リストに含めたすべてのidが同じ変更を受け取ります——取引ごとに内容を変えることはできません。データを変更するので、banking:readではなくbanking:writeが必要です。

PUT/banking/transactions/bulk

必要なスコープ

banking:write
リクエストボディ
transactionIds

変更する取引のutgr_キー。最低1件、最大100件です。100件を超えると、上のpageSizeとは違って丸められるのではなく拒否されます——400が返り、何も変更されません。

categoryKey任意

割り当てるカテゴリのfcat_キー。省略すると、取引は今のカテゴリのままです。

merchantName任意

自分で付ける加盟店名。最大1000文字。省略すると、今の名前のままです。

description任意

この取引に自分で付けるメモ。最大5000文字。省略すると、今のメモのままです。

clearCategory任意

カテゴリの上書きを外し、Era自身の分類に戻します。デフォルトはfalseです。

clearMerchantName任意

加盟店名の上書きを外し、銀行から届いた名前に戻します。デフォルトはfalseです。

clearDescription任意

メモの上書きを外し、銀行から届いた説明に戻します。デフォルトはfalseです。

reviewStatus任意

needs_review、reviewed、flaggedのいずれかを付けます。

clearReviewStatus任意

レビューステータスの上書きを外します。デフォルトはfalseです。

レスポンス · 200

{
  "transactions": []
}

更新された取引が返ります。形は上の一覧が返すものと同じです。同じ呼び出しの中でフィールドを設定しつつ同時にクリアすると400が返り、空のリストを送った場合も400です。自分のものではない取引、あるいはそもそも存在しない取引がリストに一件でも含まれていると、呼び出し全体が403になります——何も変更されません。書き込んでいる間に別の何かがそれらの行のどれかを変更していた場合は409が返ります。読み直してから、もう一度送ってください。

カテゴリ

GET/banking/categories

必要なスコープ

banking:read

カテゴリ体系のすべて。カテゴリのまとまりごとに、その下位カテゴリが入れ子で入ります。この体系は共通で、口座ごとではありません。

レスポンス · 200

{
  "packs": [
    {
      "packSlug": "default",
      "packName": "Era default categories",
      "isDefault": true,
      "categories": [
        {
          "projectionKey": "fcat_food_dining",
          "categoryName": "Food & dining",
          "isTopLevel": true,
          "children": []
        }
      ]
    }
  ],
  "meterLimit": 25,
  "canCreateCustomCategories": true
}

カテゴリを追加する

既存の親カテゴリの下に作る、ユーザー定義のカテゴリです。データを変更するので、banking:readではなくbanking:writeが必要です。

POST

必要なスコープ

banking:write
リクエストボディ
slug

URLで使える識別子——小文字、数字、ハイフンのみ、2〜50文字。

parentCategoryKey

このカテゴリを入れ子にする親カテゴリのfcat_キー。

name

表示名。

description任意

任意の説明。

iconName任意

任意のアイコン名。

spendingType任意

任意の支出分類。

displayOrder任意

兄弟カテゴリの中での任意の並び順。

assignmentEligibility任意

このカテゴリをどの取引に割り当てられるかを決める任意のルール。

sourceSystemKeys任意

今後ここへ振り分ける、既存カテゴリキーの任意のリスト。

applyRetroactively任意

trueにすると、過去の取引も新しい振り分けで再評価します。デフォルトはfalseです。

レスポンス · 201

{
  "categoryKey": "fcat_side_hustle_9f2a",
  "overlayProjectionKey": "fcov_9f2a1c",
  "action": "created",
  "isQuotaExceeded": false,
  "createdMappingRuleKeys": [],

}

レスポンスにはretroactiveAffectedCount、mergeSourcesHiddenCount、mergeSourcesTotalCount、meterGateも含まれます。これらはカテゴリの統合や上限付きの新規作成とこの呼び出しが共有するフィールドで、ここには表示していません。

タグ

GET/banking/tags

必要なスコープ

banking:read

アカウントのタグをすべて、ひとつのリストで返します。ページ分割はありません。1回のレスポンスですべて返ります。

クエリパラメータ
tagType任意

タグの発生元で絞り込みます:user、system、autoのいずれか。

includeDeleted任意

削除済みのタグも含めます。デフォルトはfalseです。

レスポンス · 200

{
  "tags": [
    {
      "tagKey": "utag_9c2f01ab",
      "name": "business-expense",
      "displayName": "Business expense",
      "tagType": "user",
      "color": "#6DC6BA",
      "transactionCount": 42
    }
  ]
}

タグを作成する

A new tag, canonicalized to lowercase. Mutating, so it needs banking:write rather than banking:read. System tags cannot be created through the API; user and auto tags can.

POST

必要なスコープ

banking:write
リクエストボディ
name

タグの正規名。

displayName任意

任意の表示名。デフォルトは正規名です。

tagType任意

user or auto. Defaults to user. system is refused — it is reserved for tags Era creates itself.

color任意

表示用の任意の16進カラー。

icon任意

任意のアイコン名。

レスポンス · 201

{
  "tag": {
    "tagKey": "utag_9c2f01ab",
    "name": "business-expense",
    "displayName": "Business expense",
    "tagType": "user",
    "version": 1,
    "createdAt": "2026-08-26T09:15:00Z"
  }
}