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"e=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. |