会計ソフト向け為替レートAPI

仕訳、レポート、月末評価替えに現在または過去の為替レートを使えます。換算額と一緒に、レート、日付、出典、繰越フラグを保存します。

会計イベントごとに1つのレートを使う

請求、入金、月末締めは別の日に起きます。すべてを今日のレートで計算し直してはいけません。会計方針で決めた日付のレートを取得し、その日付を仕訳に保存します。7月15日付の2,400 EURの請求書は、10月にレポートを開いても同じUSD計上額を示す必要があります。

現在のレートは、今の市場を反映するダッシュボードや概算に向いています。過去の取引には過去レートのエンドポイントを使います。指定日が週末や祝日なら、直前に公表された値が返り、is_forward_filledが付きます。会社のルールに合わせて、その値を採用、表示、または拒否できます。

金額と一緒に根拠を保存する

元の通貨と金額を残します。さらに、レポート通貨、換算額、丸めていないレート、指定日、観測時刻を示すdata_updated_at、source、is_forward_filledを保存します。換算後の金額だけでは足りません。これらがないと、過去のレポートと今日の計算結果が違う理由を経理担当者が説明できません。

金額には適切な10進数型を使い、通貨の小数桁に合わせて金額を丸めます。レート自体は全桁を保存します。レートを先に丸めると、小さな差が何千行にも積み重なり、後の照合で初めて問題になります。

月末に未決済残高を評価替えする

外貨建ての売掛金、買掛金、現金残高は、締め日に評価替えすることがあります。その日付のレート一式を1回取得し、処理全体で同じ値を使います。レポートを再現できるように、処理IDまたは締め日も結果と一緒に保存します。

元の取引額を上書きしません。評価替えの調整は別の記録として残します。請求書が支払われたら、帳簿価額と実際の決済額を比較します。これで、当初の価額、期末調整、支払結果を分けて確認できます。

データはAPI、採用レートは会計方針が決める

exchangerate.devのレートは、参照、分析、レポート向けの参考値です。会社の会計方針を決めるものでも、公式な記帳原始資料でもありません。使える日付と出典は、会社、監査人、契約、または地域の規則が決めます。

そのルールをソフトウェアに書き込みます。取引日か計上日か、休日をどう扱うか、月末にどの出典を使うかを明確にします。ルールが決まれば、APIで同じ処理を毎回行い、後の確認に必要な情報を残せます。

過去レートで仕訳を保存する

APIキーはサーバー側に置きます。この例では、計算結果と一緒に為替レートと出典情報を保存します。

TypeScript · 過去レートを使う仕訳
import Decimal from 'decimal.js';

type HistoricalRates = {
  date: string;
  rates: Record<string, number>;
  source: 'ecb_daily' | 'fred_daily' | 'nbp_daily';
  data_updated_at: string;
  is_forward_filled: boolean;
  derived_symbols: string[];
};

const entry = {
  id: 'inv_1048',
  accountingDate: '2026-07-15',
  currency: 'EUR',
  amount: '2400.00',
} as const;

const response = await fetch(
  `https://api.exchangerate.dev/v1/${entry.accountingDate}/${entry.currency}?symbols=USD`,
  { headers: { Authorization: `Bearer ${process.env.EXR_API_KEY}` } },
);
if (!response.ok) throw new Error('Could not load the accounting-date FX rate');

const fx = (await response.json()) as HistoricalRates;
const rawRate = fx.rates.USD;
if (!Number.isFinite(rawRate)) throw new Error('Missing EUR/USD rate');

// Decimal arithmetic avoids binary floating-point errors in booked money.
const rate = new Decimal(String(rawRate));
const reportingAmount = new Decimal(entry.amount)
  .mul(rate)
  .toDecimalPlaces(2, Decimal.ROUND_HALF_UP)
  .toFixed(2);

await saveLedgerFx({
  entry_id: entry.id,
  original_currency: entry.currency,
  original_amount: entry.amount,
  reporting_currency: 'USD',
  reporting_amount: reportingAmount,
  fx_rate: rate.toString(),
  fx_requested_date: fx.date,
  fx_source: fx.source,
  fx_observed_at: fx.data_updated_at,
  fx_is_forward_filled: fx.is_forward_filled,
});

APIを試してみますか?

クイックスタートを読み、レスポンス項目を確認してください。アカウントの利用枠が必要になったら料金も確認できます。

Freeは評価および社内の非商用利用向けです。BasicとProは商用利用に対応します。

無料の評価用キーを作成 →