StabisoDocs

API reference

Exchange rates

ECB rates against the entity's currency, cross rates, history, a converter, the official VAT rates next to them, and the foreign-currency exposure a revaluation would remeasure. Reference data only: nothing here changes the books.

Operation Summary Scope Idempotency-Key
GET /v1/entities/{entity}/fx/convert Convert an amount at the ECB rate read
GET /v1/entities/{entity}/fx/exposure Get the foreign-currency exposure read
GET /v1/entities/{entity}/fx/exposure/items List the positions behind the exposure read
GET /v1/entities/{entity}/fx/history Get the rate history of a currency pair read
GET /v1/entities/{entity}/fx/matrix Get the cross-rate matrix of a set of currencies read
GET /v1/entities/{entity}/fx/rates List exchange rates against the entity's currency read
GET /v1/entities/{entity}/fx/tax-rates Compare accounting rates with the official VAT rates read

GET /v1/entities/{entity}/fx/convert

Convert an amount at the ECB rate

The amount in the other currency at the ECB rate of the fixing on or before the date, with the rate, its inverse, the route and the fixing day used.

converted is amount times the 10-decimal rate, rounded half-even to the minor unit of the target currency, as data-vNext's /v1/fx/convert rounds. The result is indicative: the books round half-up, so a booked amount can differ by one minor unit on an exact tie. It uses the ECB rate the books use, not the official VAT rate (/tax-rates). 422 for a currency the ECB does not publish or an amount with more than 18 integer digits; 404 if there is no fixing within 7 days before the date.

Required scope read (admin implies every scope)
Operation id convert_v1_entities__entity__fx_convert_get

Parameters

In Name Type Required Description
path entity string yes Entity code, e.g. CH01 (GET /v1/entities).
query amount decimal string yes The amount in the from currency, a decimal such as 1250.50.
query from string yes ISO 4217 code of the currency to convert from. (min length 3; max length 3)
query to string yes ISO 4217 code of the currency to convert to. (min length 3; max length 3)
query date string (date) or null The date the rates are for (ISO 8601, e.g. 2026-09-26). The latest ECB fixing on or before it is used (up to 7 days back); a weekend or holiday therefore answers with the previous fixing and fallback true. Defaults to today where the entity is.

Example request

curl "$ERP_URL/v1/entities/CH01/fx/convert?amount=1250.50&from=USD&to=CHF" \
  -H "Authorization: Bearer $ERP_KEY"

Responses

Status Meaning Body
200 OK FxConversion
401 Missing or invalid API key (unauthorized). ErrorEnvelope
403 The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). ErrorEnvelope
404 The resource does not exist, or belongs to another organization (not_found). ErrorEnvelope
422 Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. HTTPValidationError

Example response (shape)

{
  "entity": "string",
  "requested_date": "2026-09-21",
  "fixing_date": "2026-09-21",
  "fallback": true,
  "source": "string",
  "sources": [
    {
      "authority": "string",
      "url": "string",
      "reference": "string"
    }
  ],
  "dataset_version": "string",
  "decimals": 1,
  "rounding": "string",
  "amount": "string",
  "from_currency": "string",
  "to_currency": "string",
  "rate": "string",
  "inverse": "string",
  "converted": "string",
  "path": [
    "string"
  ]
}

GET /v1/entities/{entity}/fx/exposure

Get the foreign-currency exposure

Open receivables, open payables and foreign-currency bank balances by currency, in the transaction currency and in the functional currency at the date's rate, against the amount booked: difference is how far each balance moves if revalued, and unrealised the result (gain positive) the period-end FX revaluation would post.

It uses the revaluation's own selection, so at a period end totals.unrealised is the revaluation's balancing line: posted documents in another currency than the functional one, open at the date (payments and credit notes posted on or before it), and the balances of foreign-currency asset accounts; each value rounded half up to the minor unit. Credit notes count negative. Each figure's count is the number of rows /exposure/items lists for it.

Required scope read (admin implies every scope)
Operation id exposure_v1_entities__entity__fx_exposure_get

Parameters

In Name Type Required Description
path entity string yes Entity code, e.g. CH01 (GET /v1/entities).
query date string (date) or null The date the rates are for (ISO 8601, e.g. 2026-09-26). The latest ECB fixing on or before it is used (up to 7 days back); a weekend or holiday therefore answers with the previous fixing and fallback true. Defaults to today where the entity is.

Example request

curl "$ERP_URL/v1/entities/CH01/fx/exposure" \
  -H "Authorization: Bearer $ERP_KEY"

Responses

Status Meaning Body
200 OK FxExposure
401 Missing or invalid API key (unauthorized). ErrorEnvelope
403 The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). ErrorEnvelope
404 The resource does not exist, or belongs to another organization (not_found). ErrorEnvelope
422 Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. HTTPValidationError

Example response (shape)

{
  "entity": "string",
  "requested_date": "2026-09-21",
  "fixing_date": "2026-09-21",
  "fallback": true,
  "source": "string",
  "sources": [
    {
      "authority": "string",
      "url": "string",
      "reference": "string"
    }
  ],
  "dataset_version": "string",
  "decimals": 1,
  "rounding": "string",
  "functional_currency": "string",
  "rows": [
    {
      "currency": "string",
      "rate": "string",
      "receivables": {
        "count": null,
        "booked": null,
        "revalued": null,
        "difference": null,
        "amount": null
      },
      "payables": {
        "count": null,
        "booked": null,
        "revalued": null,
        "difference": null,
        "amount": null
      },
      "bank": {
        "count": null,
        "booked": null,
        "revalued": null,
        "difference": null,
        "amount": null
      },
      "unrealised": "string"
    }
  ],
  "totals": {
    "receivables": {
      "count": 1,
      "booked": "string",
      "revalued": "string",
      "difference": "string"
    },
    "payables": {
      "count": 1,
      "booked": "string",
      "revalued": "string",
      "difference": "string"
    },
    "bank": {
      "count": 1,
      "booked": "string",
      "revalued": "string",
      "difference": "string"
    },
    "unrealised": "string"
  }
}

GET /v1/entities/{entity}/fx/exposure/items

List the positions behind the exposure

The open documents and bank balances that make up /exposure, with the amount in the transaction currency, the booked amount, the value at the date's rate and the difference. total is the number of matching positions and equals the count of the matching cells of /exposure; a credit note is negative. Ordered by currency, side and number or code.

Required scope read (admin implies every scope)
Operation id exposure_items_v1_entities__entity__fx_exposure_items_get

Parameters

In Name Type Required Description
path entity string yes Entity code, e.g. CH01 (GET /v1/entities).
query date string (date) or null The date the rates are for (ISO 8601, e.g. 2026-09-26). The latest ECB fixing on or before it is used (up to 7 days back); a weekend or holiday therefore answers with the previous fixing and fallback true. Defaults to today where the entity is.
query side "bank" | "payables" | "receivables" or null receivables, payables or bank; default all three.
query currency string or null ISO 4217 code to filter on; default every foreign currency. (min length 3; max length 3)
query limit integer Page size, 1 to 500 (default 100). (min 1; max 500; default 100)
query offset integer Positions to skip, for the next page. (min 0; default 0)

Example request

curl "$ERP_URL/v1/entities/CH01/fx/exposure/items" \
  -H "Authorization: Bearer $ERP_KEY"

Responses

Status Meaning Body
200 OK FxExposureItems
401 Missing or invalid API key (unauthorized). ErrorEnvelope
403 The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). ErrorEnvelope
404 The resource does not exist, or belongs to another organization (not_found). ErrorEnvelope
422 Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. HTTPValidationError

Example response (shape)

{
  "entity": "string",
  "requested_date": "2026-09-21",
  "fixing_date": "2026-09-21",
  "side": "bank",
  "currency": "string",
  "total": 1,
  "limit": 1,
  "offset": 1,
  "items": [
    {
      "side": "bank",
      "currency": "string",
      "kind": "account",
      "reference": "string",
      "description": "string",
      "document_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "account_code": "string",
      "document_date": "2026-09-21",
      "amount": "string",
      "booked": "string",
      "revalued": "string",
      "difference": "string"
    }
  ]
}

GET /v1/entities/{entity}/fx/history

Get the rate history of a currency pair

The daily ECB cross rate of a pair over a range, for a chart and a table: every fixing day's rate (weekends and holidays have none), the first and last rate, the minimum and maximum with the day each occurred, the average and the change.

The average is the arithmetic mean of the daily cross rates, rounded to 10 decimals half-even: the method of the IAS 21 average, applied to the range. month adds the IAS 21 average and closing rate of the latest completed month in the range, from data-vNext's /v1/fx/period-rates: the closing rate is the one the period-end revaluation uses. 422 for a currency the ECB does not publish, equal currencies, a reversed range or one over 1830 days; 404 if the range has no fixing of both currencies.

Required scope read (admin implies every scope)
Operation id history_v1_entities__entity__fx_history_get

Parameters

In Name Type Required Description
path entity string yes Entity code, e.g. CH01 (GET /v1/entities).
query base string yes ISO 4217 code of the currency priced: 1 base = rate quote. (min length 3; max length 3)
query quote string yes ISO 4217 code of the currency the rate is in; must differ from base. (min length 3; max length 3)
query start string (date) or null First day of the range (ISO 8601). Default: 30 days before end.
query end string (date) or null Last day of the range (ISO 8601). Default: today where the entity is. The range covers at most 1830 days.

Example request

curl "$ERP_URL/v1/entities/CH01/fx/history?base=USD&quote=CHF" \
  -H "Authorization: Bearer $ERP_KEY"

Responses

Status Meaning Body
200 OK FxHistory
401 Missing or invalid API key (unauthorized). ErrorEnvelope
403 The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). ErrorEnvelope
404 The resource does not exist, or belongs to another organization (not_found). ErrorEnvelope
422 Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. HTTPValidationError

Example response (shape)

{
  "entity": "string",
  "base": "string",
  "quote": "string",
  "start": "2026-09-21",
  "end": "2026-09-21",
  "source": "string",
  "sources": [
    {
      "authority": "string",
      "url": "string",
      "reference": "string"
    }
  ],
  "dataset_version": "string",
  "decimals": 1,
  "rounding": "string",
  "points": [
    {
      "date": "2026-09-21",
      "rate": "string"
    }
  ],
  "count": 1,
  "first": {
    "date": "2026-09-21",
    "rate": "string"
  },
  "last": {
    "date": "2026-09-21",
    "rate": "string"
  },
  "minimum": {
    "date": "2026-09-21",
    "rate": "string"
  },
  "maximum": {
    "date": "2026-09-21",
    "rate": "string"
  },
  "average": "string",
  "change": "string",
  "change_percent": "string",
  "month": {
    "period": "string",
    "average": "string",
    "closing": "string",
    "fixings": 1,
    "first_fixing": "2026-09-21",
    "last_fixing": "2026-09-21"
  }
}

GET /v1/entities/{entity}/fx/matrix

Get the cross-rate matrix of a set of currencies

The cross rate of every currency pair of a set. Read it as 1 row = x column: rows[i].rates[j] is the units of currencies[j] one currencies[i] buys, and the diagonal is 1.

Each cell is the ECB rate of the column currency divided by that of the row currency (triangulated through EUR, method), computed at full precision and rounded once to 10 decimals half-even; the inverse cell is computed the same way round, not as 1 over the rounded rate, so a pair and its inverse differ from 1 by at most the rounding of 10 decimals. 422 for a currency the ECB does not publish or more than 24 currencies; 404 if there is no fixing within 7 days before the date.

Required scope read (admin implies every scope)
Operation id matrix_v1_entities__entity__fx_matrix_get

Parameters

In Name Type Required Description
path entity string yes Entity code, e.g. CH01 (GET /v1/entities).
query date string (date) or null The date the rates are for (ISO 8601, e.g. 2026-09-26). The latest ECB fixing on or before it is used (up to 7 days back); a weekend or holiday therefore answers with the previous fixing and fallback true. Defaults to today where the entity is.
query currencies string or null Comma-separated ISO 4217 codes, e.g. CHF,EUR,USD, at most 24. Default: the entity's functional currency, the currencies it uses, and EUR, USD, CHF and GBP.

Example request

curl "$ERP_URL/v1/entities/CH01/fx/matrix" \
  -H "Authorization: Bearer $ERP_KEY"

Responses

Status Meaning Body
200 OK FxMatrix
401 Missing or invalid API key (unauthorized). ErrorEnvelope
403 The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). ErrorEnvelope
404 The resource does not exist, or belongs to another organization (not_found). ErrorEnvelope
422 Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. HTTPValidationError

Example response (shape)

{
  "entity": "string",
  "requested_date": "2026-09-21",
  "fixing_date": "2026-09-21",
  "fallback": true,
  "source": "string",
  "sources": [
    {
      "authority": "string",
      "url": "string",
      "reference": "string"
    }
  ],
  "dataset_version": "string",
  "decimals": 1,
  "rounding": "string",
  "reading": "string",
  "method": "string",
  "currencies": [
    "string"
  ],
  "rows": [
    {
      "currency": "string",
      "rates": [
        "string"
      ]
    }
  ]
}

GET /v1/entities/{entity}/fx/rates

List exchange rates against the entity's currency

Every currency the ECB publishes against the entity's functional currency: the rate (1 currency = rate functional), its inverse, the fixing day used, and whether the entity uses the currency (documents, active bank accounts, open items; those first).

Rates are the ECB euro reference rates of the fixing, triangulated through EUR and rounded once to 10 decimals half-even (decimals, rounding), so they equal data-vNext's /v1/fx/convert. fixing_date is the ECB day used, fallback is true when it is earlier than requested_date, and sources names the authority. 404 if there is no fixing within 7 days before the date; 422 if the functional currency is not an ECB currency.

Required scope read (admin implies every scope)
Operation id rates_v1_entities__entity__fx_rates_get

Parameters

In Name Type Required Description
path entity string yes Entity code, e.g. CH01 (GET /v1/entities).
query date string (date) or null The date the rates are for (ISO 8601, e.g. 2026-09-26). The latest ECB fixing on or before it is used (up to 7 days back); a weekend or holiday therefore answers with the previous fixing and fallback true. Defaults to today where the entity is.

Example request

curl "$ERP_URL/v1/entities/CH01/fx/rates" \
  -H "Authorization: Bearer $ERP_KEY"

Responses

Status Meaning Body
200 OK FxRates
401 Missing or invalid API key (unauthorized). ErrorEnvelope
403 The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). ErrorEnvelope
404 The resource does not exist, or belongs to another organization (not_found). ErrorEnvelope
422 Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. HTTPValidationError

Example response (shape)

{
  "entity": "string",
  "requested_date": "2026-09-21",
  "fixing_date": "2026-09-21",
  "fallback": true,
  "source": "string",
  "sources": [
    {
      "authority": "string",
      "url": "string",
      "reference": "string"
    }
  ],
  "dataset_version": "string",
  "decimals": 1,
  "rounding": "string",
  "functional_currency": "string",
  "rows": [
    {
      "currency": "string",
      "rate": "string",
      "inverse": "string",
      "in_use": true,
      "documents": 1,
      "bank_accounts": 1,
      "open_items": 1
    }
  ],
  "in_use": 1
}

GET /v1/entities/{entity}/fx/tax-rates

Compare accounting rates with the official VAT rates

For the entity's country, side by side: the accounting rate (the ECB rate the books translate documents, payments and revaluations at, for bookkeeping) and the official VAT rate (BAZG for Switzerland, MWSTV Art. 45; the monthly rates the BMF announces for Germany, derived from the ECB reference rates and read from the Bundesbank, UStG §16 Abs. 6; the rate for the VAT amounts and turnover on the return), both as tax currency per one unit of the foreign currency, with the difference.

The VAT rate follows the method of the entity's VAT settings (tax.method). A rate that is not published yet, or does not list the currency, is provisional with the reason. Where the country prescribes no official rate, or the entity does not book in its tax currency, supported is false and rows is empty. 404 if there is no ECB fixing within 7 days.

Required scope read (admin implies every scope)
Operation id tax_rates_v1_entities__entity__fx_tax_rates_get

Parameters

In Name Type Required Description
path entity string yes Entity code, e.g. CH01 (GET /v1/entities).
query date string (date) or null The date the rates are for (ISO 8601, e.g. 2026-09-26). The latest ECB fixing on or before it is used (up to 7 days back); a weekend or holiday therefore answers with the previous fixing and fallback true. Defaults to today where the entity is.
query currencies string or null Comma-separated ISO 4217 codes, e.g. CHF,EUR,USD, at most 24. Default: the entity's functional currency, the currencies it uses, and EUR, USD, CHF and GBP.

Example request

curl "$ERP_URL/v1/entities/CH01/fx/tax-rates" \
  -H "Authorization: Bearer $ERP_KEY"

Responses

Status Meaning Body
200 OK FxTaxRates
401 Missing or invalid API key (unauthorized). ErrorEnvelope
403 The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). ErrorEnvelope
404 The resource does not exist, or belongs to another organization (not_found). ErrorEnvelope
422 Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. HTTPValidationError

Example response (shape)

{
  "entity": "string",
  "jurisdiction": "string",
  "functional_currency": "string",
  "requested_date": "2026-09-21",
  "supported": true,
  "tax_currency": "string",
  "accounting": {
    "series": "string",
    "use": "string",
    "fixing_date": "2026-09-21",
    "sources": [
      {
        "authority": null,
        "url": null,
        "reference": null
      }
    ]
  },
  "tax": {
    "method": "string",
    "series": "string",
    "use": "string",
    "legal_basis": "string",
    "authority": {
      "authority": null,
      "url": null,
      "reference": null
    }
  },
  "dataset_version": "string",
  "rows": [
    {
      "currency": "string",
      "in_use": true,
      "accounting_rate": "string",
      "status": "final",
      "tax_rate": "string",
      "published_rate": "string",
      "quoted_as": "string",
      "tax_period": "string",
      "tax_fixing_date": "2026-09-21",
      "difference": "string",
      "difference_percent": "string",
      "reason": "string"
    }
  ]
}

Schemas

FxAccountingBasis

Field Type Required Description
series string yes ecb.
use string yes What it is for: booking, the rate documents, payments and revaluation are translated at.
fixing_date string (date) yes The ECB fixing day used.
sources array of FxSourceRef yes The authority and where it publishes.

FxConversion

Field Type Required Description
entity string yes Entity code.
requested_date string (date) yes The date asked for (ISO 8601).
fixing_date string (date) yes The ECB fixing day actually used: the latest on or before requested_date.
fallback boolean yes True when fixing_date is earlier than requested_date: a weekend or a holiday has no fixing, so the previous one applies.
source string yes The series: ecb, the euro reference rates.
sources array of FxSourceRef yes The authority and where it publishes.
dataset_version string yes The data-vNext dataset version that answered (an archived version can be pinned to reproduce the answer).
decimals integer yes Decimals of every rate: 10.
rounding string yes How the last decimal is rounded: half_even, once, after the division.
amount string yes The amount converted, in from_currency. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
from_currency string yes The currency converted from.
to_currency string yes The currency converted to.
rate string yes Units of to_currency per one from_currency, 10 decimals. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
inverse string yes Units of from_currency per one to_currency. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
converted string yes amount times rate, rounded half-even to the minor unit of to_currency, as data-vNext's /v1/fx/convert does. Indicative: the books round half-up (round_money), so a booked amount can differ by one minor unit on an exact tie. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
path array of string yes The route: through EUR unless one currency is EUR.

FxExposure

Field Type Required Description
entity string yes Entity code.
requested_date string (date) yes The date asked for (ISO 8601).
fixing_date string (date) yes The ECB fixing day actually used: the latest on or before requested_date.
fallback boolean yes True when fixing_date is earlier than requested_date: a weekend or a holiday has no fixing, so the previous one applies.
source string yes The series: ecb, the euro reference rates.
sources array of FxSourceRef yes The authority and where it publishes.
dataset_version string yes The data-vNext dataset version that answered (an archived version can be pinned to reproduce the answer).
decimals integer yes Decimals of every rate: 10.
rounding string yes How the last decimal is rounded: half_even, once, after the division.
functional_currency string yes The company's functional currency.
rows array of FxExposureRow yes One row per foreign currency, by code.
totals FxExposureTotals yes The totals in the functional currency.

FxExposureCell

Field Type Required Description
count integer yes Positions counted.
booked string yes What the books hold, in the functional currency.
revalued string yes The value at the selected date's rate, in the functional currency, each position rounded half up to the minor unit as a revaluation books it.
difference string yes revalued less booked: how far the balance moves if revalued.
amount string yes The positions' sum in the transaction currency (credit notes count negative).

FxExposureItem

Field Type Required Description
side "bank" | "payables" | "receivables" yes receivables, payables or bank.
currency string yes The transaction currency.
kind "account" | "document" yes document for an open item, account for a bank balance.
reference string yes The document number or the account code.
description string or null The customer or vendor, or the account name.
document_id string (uuid) or null The document's id, for an open item.
account_code string or null The account's code, for a bank.
document_date string (date) or null The document's date.
amount string yes Open amount or balance in the transaction currency (a credit note negative).
booked string yes What the books hold, in the functional currency.
revalued string yes The value at the selected date's rate.
difference string yes revalued less booked.

FxExposureItems

Field Type Required Description
entity string yes Entity code.
requested_date string (date) yes The date asked for.
fixing_date string (date) yes The ECB fixing day used.
side "bank" | "payables" | "receivables" or null The side filtered on, if any.
currency string or null The currency filtered on, if any.
total integer yes How many positions match: the count of the matching cells of /exposure.
limit integer yes Page size.
offset integer yes Positions skipped.
items array of FxExposureItem yes The matching positions by currency and reference.

FxExposureRow

Field Type Required Description
currency string yes ISO 4217 code of the transaction currency.
rate string yes Units of the functional currency per one unit, 10 decimals. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
receivables FxExposureCell yes Open customer invoices and credit notes.
payables FxExposureCell yes Open vendor bills and credit notes.
bank FxExposureCell yes Balances of the accounts held in the currency.
unrealised string yes The unrealised result a revaluation would post for the currency, as a gain (positive) or a loss: receivables and bank difference less payables difference.

FxExposureTotals

Field Type Required Description
receivables FxSubtotal yes Receivables in every foreign currency.
payables FxSubtotal yes Payables in every foreign currency.
bank FxSubtotal yes Foreign-currency bank balances.
unrealised string yes The unrealised result a revaluation at this date would post: the sum of the rows, equal to the balancing line of the period-end revaluation entry.

FxExtreme

Field Type Required Description
date string (date) yes The fixing day.
rate string yes The rate on that day, 10 decimals. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)

FxHistory

Field Type Required Description
entity string yes Entity code.
base string yes The currency priced: 1 base = rate quote.
quote string yes The currency the rate is in.
start string (date) yes First day of the range.
end string (date) yes Last day of the range.
source string yes The series: ecb.
sources array of FxSourceRef yes The authority and where it publishes.
dataset_version string yes The data-vNext dataset version that answered.
decimals integer yes Decimals of every rate: 10.
rounding string yes How the last decimal is rounded: half_even.
points array of FxPoint yes The daily cross rate on every ECB fixing day of the range, oldest first. Weekends and holidays have no point.
count integer yes Number of points.
first FxExtreme yes The first rate of the range.
last FxExtreme yes The last rate of the range.
minimum FxExtreme yes The lowest rate and the first day it occurred.
maximum FxExtreme yes The highest rate and the first day it occurred.
average string yes Arithmetic mean of the points, 10 decimals half-even: the method of the IAS 21 average, applied to the range shown. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
change string yes Last rate less first rate. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
change_percent string yes change as a percentage of the first rate, 4 decimals. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
month FxMonthAverage or null The IAS 21 average and closing rate of the latest completed month in the range; null when data-vNext has no complete month of fixings for the pair.

FxMatrix

Field Type Required Description
entity string yes Entity code.
requested_date string (date) yes The date asked for (ISO 8601).
fixing_date string (date) yes The ECB fixing day actually used: the latest on or before requested_date.
fallback boolean yes True when fixing_date is earlier than requested_date: a weekend or a holiday has no fixing, so the previous one applies.
source string yes The series: ecb, the euro reference rates.
sources array of FxSourceRef yes The authority and where it publishes.
dataset_version string yes The data-vNext dataset version that answered (an archived version can be pinned to reproduce the answer).
decimals integer yes Decimals of every rate: 10.
rounding string yes How the last decimal is rounded: half_even, once, after the division.
reading string yes How to read the matrix: 1 row = x column, e.g. the row USD and the column CHF hold how many francs one dollar buys.
method string yes triangulated through EUR: each cell is the ECB rate of the column currency divided by that of the row currency.
currencies array of string yes The currencies, in the order of rows and columns.
rows array of FxMatrixRow yes One row per currency.

FxMatrixRow

Field Type Required Description
currency string yes The row currency: 1 row = x column.
rates array of string yes rates[j] is units of columns[j] per one unit of the row currency, 10 decimals; 1 on the diagonal.

FxMonthAverage

The IAS 21 rates of a completed calendar month, from data-vNext /v1/fx/period-rates: the average revaluation-style reports use for income and expenses and the closing rate the revaluation uses for balances.

Field Type Required Description
period string yes The month, YYYY-MM: the latest completed one in range.
average string yes IAS 21 average: the mean of the daily cross rates over the month's fixings, 10 decimals. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
closing string yes IAS 21 closing rate: the last fixing on or before the month end, which is the rate the period-end revaluation uses. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
fixings integer yes Daily fixings in the average.
first_fixing string (date) yes The first fixing day of the month.
last_fixing string (date) yes The last fixing day of the month.

FxPoint

Field Type Required Description
date string (date) yes The fixing day.
rate string yes Units of the quote currency per one base unit. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)

FxRateRow

Field Type Required Description
currency string yes ISO 4217 code of the currency.
rate string yes Units of the functional currency per one unit of currency (1 currency = rate functional), 10 decimals: the rate a revaluation uses. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
inverse string yes Units of currency per one unit of the functional currency, 10 decimals. Computed from the fixings, not as 1 / rate, so it carries no second rounding. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
in_use boolean yes True when the company has documents, a bank account or open items in it.
documents integer yes Documents in the currency (drafts included).
bank_accounts integer yes Active accounts held in the currency.
open_items integer yes Posted documents in the currency that are still open.

FxRates

Field Type Required Description
entity string yes Entity code.
requested_date string (date) yes The date asked for (ISO 8601).
fixing_date string (date) yes The ECB fixing day actually used: the latest on or before requested_date.
fallback boolean yes True when fixing_date is earlier than requested_date: a weekend or a holiday has no fixing, so the previous one applies.
source string yes The series: ecb, the euro reference rates.
sources array of FxSourceRef yes The authority and where it publishes.
dataset_version string yes The data-vNext dataset version that answered (an archived version can be pinned to reproduce the answer).
decimals integer yes Decimals of every rate: 10.
rounding string yes How the last decimal is rounded: half_even, once, after the division.
functional_currency string yes The company's functional currency.
rows array of FxRateRow yes Every currency the ECB publishes except the functional one: the ones in use first, then the rest by code.
in_use integer yes How many of the rows are in use.

FxSourceRef

Where a rate comes from: the authority behind it and the page that publishes it.

Field Type Required Description
authority string yes The publisher, e.g. European Central Bank.
url string or null The page the rates are published on.
reference string or null The name of the publication or the legal basis; null if none.

FxSubtotal

Field Type Required Description
count integer yes Positions counted.
booked string yes What the books hold, in the functional currency.
revalued string yes The value at the selected date's rate, in the functional currency, each position rounded half up to the minor unit as a revaluation books it.
difference string yes revalued less booked: how far the balance moves if revalued.

FxTaxBasis

Field Type Required Description
method string or null yes The method the company's VAT settings use: monthly or daily (CH, BAZG), monthly or ecb_daily (DE). Null where no official rates apply.
series string or null yes The data-vNext series, e.g. ch-vat-monthly, de-vat-monthly; ecb for the German daily ECB method. Null where no official rates apply.
use string yes What it is for: vat_return, the rate for the VAT amounts and the turnover on the VAT return.
legal_basis string or null yes The rule that prescribes it: MWSTV Art. 45 (CH) or UStG §16 Abs. 6 (DE).
authority FxSourceRef or null yes The authority that publishes the rates, from the source register; null where it lists none.

FxTaxRateRow

Field Type Required Description
currency string yes ISO 4217 code of the foreign currency.
in_use boolean yes True when the company uses the currency.
accounting_rate string yes ECB rate: units of the tax currency per one unit of currency, 10 decimals. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
status "final" | "provisional" yes final when the official rate is published, provisional when it is not yet (or does not list the currency): tax_rate is then null and reason says why.
tax_rate string or null The official rate as units of the tax currency per one unit of currency (the German rate, quoted the other way round, is inverted), 10 decimals; null while provisional. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
published_rate string or null The rate as the authority publishes it, in quoted_as. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
quoted_as string or null How it is quoted: CHF per 1 USD or USD per 1 EUR.
tax_period string or null The month the official rate covers (YYYY-MM), if monthly.
tax_fixing_date string (date) or null The publication day the official rate carries.
difference string or null tax_rate less accounting_rate: the part of a foreign-currency document's VAT that differs from its booked rate. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
difference_percent string or null difference as a percentage of accounting_rate. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
reason string or null Why the official rate is missing, as data-vNext says it.

FxTaxRates

Field Type Required Description
entity string yes Entity code.
jurisdiction string yes The entity's country, which decides the tax rate.
functional_currency string yes The entity's functional currency.
requested_date string (date) yes The date asked for: the tax point.
supported boolean yes True when the country prescribes official VAT exchange rates and the entity books in its tax currency (CH in francs, DE in euros).
tax_currency string or null yes CHF or EUR; null where unsupported.
accounting FxAccountingBasis yes The ECB rate the books use.
tax FxTaxBasis yes The official VAT rate the return uses.
dataset_version string yes The data-vNext dataset version that answered.
rows array of FxTaxRateRow yes One row per currency, each with both rates; empty where unsupported.
Stabiso, the Enterprise System of Record · generated from the code and its guides · release 6f03a5e846b3