StabisoDocs

Reference data API

Fixed assets

Depreciation methods, tax regimes and depreciation schedules.

Operation Summary
POST /v1/fixed-assets/depreciation-schedule Compute a depreciation schedule
GET /v1/fixed-assets/methods List the depreciation methods
GET /v1/fixed-assets/regimes List the depreciation regimes
GET /v1/fixed-assets/regimes/{regime_id} Get a regime with its asset classes

POST /v1/fixed-assets/depreciation-schedule

Compute a depreciation schedule

Compute a depreciation schedule for one asset.

Give the cost, the start date and either an asset_class (which fills the method, life, convention, rate and table from the catalog) or a method with its parameters; explicit request values override the asset class. All arithmetic is decimal and each period is rounded to decimals, with the last period absorbing the rounding difference, so the schedule sums exactly to the depreciable base. data.periods has one row per fiscal year (opening, charge, accumulated and closing book value); data.notes says where parameters came from and how the schedule ends, each by a code with the values it names (details) and in English (text). Refuses with 422 when method and asset_class are both missing, a parameter the method needs is missing (e.g. useful_life_years for straight line), the asset class or table is unknown or not in force on start_date, or salvage is not below cost.

Authentication an API key, where the server requires one
Operation id schedule_v1_fixed_assets_depreciation_schedule_post

Parameters

In Name Type Required Description
query dataset_version string or null Pin the response to an archived dataset version (git SHA). Defaults to the current version. Also accepted as the X-Dataset-Version header. The version that answered is in meta.dataset_version; an archived version that does not exist gives 404.

Request body

application/json (required): ScheduleRequest

Field Type Required Description
cost decimal string yes Acquisition cost to depreciate, as a decimal string in the asset's currency, e.g. '50000.00'. Must be greater than zero. (greater than 0)
start_date string (date) yes Date the asset is placed in service (ISO 8601). It sets the first fiscal year and, with the convention, the share of that year that is depreciated.
acquisition_date string (date) or null Date the asset was acquired or made, when it differs from start_date (the start of depreciation). A regime that allows declining balance only for acquisitions in a window checks this date (DE § 7 (2) EStG). Default: start_date.
method "declining_balance" | "straight_line" | "sum_of_years_digits" | "table" | "units_of_production" or null straight_line, declining_balance, sum_of_years_digits, units_of_production or table (published percentages). Required unless asset_class supplies it.
asset_class string or null Catalog asset class id; fills method, life, convention, rate and table.
salvage decimal string Residual value at the end of life, as a decimal string; must be less than cost. Default 0. Ignored by the table method. (min 0; default "0")
useful_life_years decimal string or null Useful life in years, e.g. '5' or '12.5'. Required for straight_line and sum_of_years_digits (a whole number for the latter) unless asset_class supplies it. (greater than 0)
convention "full_year" | "half_year" | "mid_month" | "pro_rata_months" or null Share of the first year that is depreciated: full_year, half_year, mid_month (months left, the acquisition month counted as half) or pro_rata_months (months left including the acquisition month). Defaults to the asset class's convention, otherwise full_year.
rate_percent decimal string or null Annual rate in percent for declining_balance, e.g. '20'. Alternative to factor with useful_life_years; overrides the asset class's rate. (max 100; greater than 0)
factor decimal string or null e.g. 2 for double declining. (greater than 0)
switch_to_straight_line boolean declining_balance only: switch to straight line over the remaining life once that gives the larger charge. Default true. (default true)
periods integer or null Number of annual periods to show. Needed for declining_balance without a useful life, which never fully depreciates; for other methods it truncates the schedule. (max 100; greater than 0)
retire_in_period integer or null declining_balance only: the period (1 = the first fiscal year) the asset is retired in. The schedule ends there and what is left above salvage is written off in it, as on scrapping (CH ESTV). Overrides periods. Ignored for a regime that keeps a retired asset in its pool (UK capital allowances) or a class that keeps the value of its land (CH buildings with land), which then shows periods, by default 30. (max 100; greater than 0)
regime string or null Regime id whose retirement rule applies when no asset_class is given, e.g. 'gb.capital_allowances' (a pool). Unknown ids are ignored.
units array of decimal string or null units_of_production only: the units produced or used in each period, as decimal strings, e.g. ['10000', '12000'].
total_units decimal string or null units_of_production only: total units the asset can produce over its life (decimal string); the depreciable base is spread over it. (greater than 0)
table string or null Depreciation table id for the table method, e.g. 'us.macrs.gds.hy.5y' (see GET /v1/fixed-assets/regimes/{regime_id}). Taken from asset_class when omitted.
fiscal_year_end_month integer Month number (1-12) in which the fiscal year ends. Default 12 (calendar year). (min 1; max 12; default 12)
decimals integer Decimal places of the amounts in the schedule (0-6). The last period absorbs the rounding difference. Default 2. (min 0; max 6; default 2)

Example request

curl -X POST "$DATAVNEXT_URL/v1/fixed-assets/depreciation-schedule" \
  -H "X-API-Key: $DATAVNEXT_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "cost": "50000",
  "start_date": "2026-05-01",
  "asset_class": "us.macrs.gds.5y"
}'

Responses

Status Meaning Body
200 OK Envelope_Schedule_
401 Missing or invalid API key. Error
404 Nothing found for the identifier, or the pinned dataset_version is not archived. Error
422 The request is invalid: {"detail": "…"} for a rule the service checks, or FastAPI's {"detail": [{"loc", "msg", "type"}]} for a malformed parameter or body. HTTPValidationError

Example response (shape)

{
  "data": {
    "method": "table",
    "convention": "half_year",
    "cost": "50000",
    "salvage": "0",
    "depreciable_base": "50000.00",
    "useful_life_years": "5",
    "table": "us.macrs.gds.hy.5y",
    "asset_class": "us.macrs.gds.5y",
    "total_depreciation": "50000.00",
    "periods": [
      {
        "period": 1,
        "fiscal_year": 2026,
        "fraction": "1",
        "opening_book_value": "50000.00",
        "depreciation": "10000.00",
        "accumulated": "10000.00",
        "closing_book_value": "40000.00"
      },
      {
        "period": 2,
        "fiscal_year": 2027,
        "fraction": "1",
        "opening_book_value": "40000.00",
        "depreciation": "16000.00",
        "accumulated": "26000.00",
        "closing_book_value": "24000.00"
      }
    ],
    "notes": [
      {
        "code": "class_parameters",
        "details": {
          "asset_class": "us.macrs.gds.5y",
          "name": "5-year property"
        },
        "text": "Parameters from asset class 'us.macrs.gds.5y' (5-year property)."
      }
    ]
  },
  "meta": {
    "dataset_version": "3f2a9c1b7d4e",
    "sources": [
      {
        "authority": "Internal Revenue Service",
        "url": "https://www.irs.gov/pub/irs-pdf/p946.pdf",
        "reference": "Publication 946 (2025), Table A-1",
        "verified_at": "2026-09-29",
        "kind": "official"
      }
    ],
    "notes": []
  }
}

GET /v1/fixed-assets/methods

List the depreciation methods

The depreciation methods the schedule endpoint supports.

data lists each method id (the values of method in the schedule request: straight_line, declining_balance, sum_of_years_digits, units_of_production, table), what it does, its formula and the request parameters it needs.

Authentication an API key, where the server requires one
Operation id methods_v1_fixed_assets_methods_get

Parameters

In Name Type Required Description
query dataset_version string or null Pin the response to an archived dataset version (git SHA). Defaults to the current version. Also accepted as the X-Dataset-Version header. The version that answered is in meta.dataset_version; an archived version that does not exist gives 404.

Example request

curl "$DATAVNEXT_URL/v1/fixed-assets/methods" \
  -H "X-API-Key: $DATAVNEXT_KEY"

Responses

Status Meaning Body
200 OK Envelope_list_DepreciationMethod__
401 Missing or invalid API key. Error
404 Nothing found for the identifier, or the pinned dataset_version is not archived. Error
422 The request is invalid: {"detail": "…"} for a rule the service checks, or FastAPI's {"detail": [{"loc", "msg", "type"}]} for a malformed parameter or body. HTTPValidationError

Example response (shape)

{
  "data": [
    {
      "sources": [
        null
      ],
      "id": "declining_balance",
      "name": "string",
      "description": "string",
      "formula": "string",
      "parameters": [
        "string"
      ]
    }
  ],
  "meta": {
    "dataset_version": "string",
    "as_of": "2026-09-21",
    "known_at": "2026-09-21",
    "sources": [
      {
        "authority": null,
        "url": null,
        "reference": null,
        "verified_at": null,
        "kind": null
      }
    ],
    "notes": [
      "string"
    ]
  }
}

GET /v1/fixed-assets/regimes

List the depreciation regimes

Depreciation regimes: US MACRS, UK capital allowances, German AfA, Swiss ESTV rates.

data lists each regime with its id (use it in /regimes/{regime_id}), whether it is a tax or book basis, the methods it allows and its default convention.

Authentication an API key, where the server requires one
Operation id regimes_v1_fixed_assets_regimes_get

Parameters

In Name Type Required Description
query jurisdiction string or null Only regimes of this country, ISO 3166 alpha-2, case-insensitive, e.g. 'DE'. Default: all. An unknown code gives an empty list.
query dataset_version string or null Pin the response to an archived dataset version (git SHA). Defaults to the current version. Also accepted as the X-Dataset-Version header. The version that answered is in meta.dataset_version; an archived version that does not exist gives 404.

Example request

curl "$DATAVNEXT_URL/v1/fixed-assets/regimes" \
  -H "X-API-Key: $DATAVNEXT_KEY"

Responses

Status Meaning Body
200 OK Envelope_list_Regime__
401 Missing or invalid API key. Error
404 Nothing found for the identifier, or the pinned dataset_version is not archived. Error
422 The request is invalid: {"detail": "…"} for a rule the service checks, or FastAPI's {"detail": [{"loc", "msg", "type"}]} for a malformed parameter or body. HTTPValidationError

Example response (shape)

{
  "data": [
    {
      "sources": [
        null
      ],
      "id": "string",
      "jurisdiction": "string",
      "name": "string",
      "basis": "book",
      "description": "string",
      "methods": [
        "declining_balance"
      ],
      "default_convention": "full_year",
      "retirement": "write_off"
    }
  ],
  "meta": {
    "dataset_version": "string",
    "as_of": "2026-09-21",
    "known_at": "2026-09-21",
    "sources": [
      {
        "authority": null,
        "url": null,
        "reference": null,
        "verified_at": null,
        "kind": null
      }
    ],
    "notes": [
      "string"
    ]
  }
}

GET /v1/fixed-assets/regimes/{regime_id}

Get a regime with its asset classes

A regime with its asset classes, percentage tables and allowances.

Asset classes and allowances are those in force on as_of; tables are returned in full. The asset class ids are what the schedule request takes as asset_class. meta.as_of is the date used. 404 for an unknown regime id.

Authentication an API key, where the server requires one
Operation id regime_v1_fixed_assets_regimes__regime_id__get

Parameters

In Name Type Required Description
path regime_id string yes Regime id, e.g. 'us.macrs.gds' (see GET /v1/fixed-assets/regimes).
query as_of string (date) or null Legal effective date: return the records in force on this date (valid_from on or before it, valid_to on or after it or empty). ISO 8601, e.g. 2020-08-01. Defaults to today (server date).
query dataset_version string or null Pin the response to an archived dataset version (git SHA). Defaults to the current version. Also accepted as the X-Dataset-Version header. The version that answered is in meta.dataset_version; an archived version that does not exist gives 404.

Example request

curl "$DATAVNEXT_URL/v1/fixed-assets/regimes/us.macrs.gds" \
  -H "X-API-Key: $DATAVNEXT_KEY"

Responses

Status Meaning Body
200 OK Envelope_RegimeDetail_
401 Missing or invalid API key. Error
404 Nothing found for the identifier, or the pinned dataset_version is not archived. Error
422 The request is invalid: {"detail": "…"} for a rule the service checks, or FastAPI's {"detail": [{"loc", "msg", "type"}]} for a malformed parameter or body. HTTPValidationError

Example response (shape)

{
  "data": {
    "regime": {
      "sources": [
        null
      ],
      "id": "string",
      "jurisdiction": "string",
      "name": "string",
      "basis": "book",
      "description": "string",
      "methods": [
        null
      ],
      "default_convention": null,
      "retirement": "write_off"
    },
    "classes": [
      {
        "sources": null,
        "valid_from": null,
        "valid_to": null,
        "published_at": null,
        "id": null,
        "regime": null,
        "name": null,
        "examples": null,
        "method": null,
        "convention": null,
        "useful_life_years": null,
        "rate_percent": null,
        "straight_line_rate_percent": null,
        "table": null,
        "retirement": null,
        "reference": null
      }
    ],
    "tables": [
      {
        "sources": null,
        "id": null,
        "regime": null,
        "recovery_period_years": null,
        "convention": null,
        "basis_method": null,
        "percentages": null
      }
    ],
    "allowances": [
      {
        "sources": null,
        "valid_from": null,
        "valid_to": null,
        "published_at": null,
        "id": null,
        "regime": null,
        "name": null,
        "description": null,
        "limit": null,
        "currency": null,
        "percent": null,
        "multiple": null
      }
    ]
  },
  "meta": {
    "dataset_version": "string",
    "as_of": "2026-09-21",
    "known_at": "2026-09-21",
    "sources": [
      {
        "authority": null,
        "url": null,
        "reference": null,
        "verified_at": null,
        "kind": null
      }
    ],
    "notes": [
      "string"
    ]
  }
}

Schemas

Allowance

Caps and first-year allowances, e.g. UK Annual Investment Allowance.

Field Type Required Description
sources array of Source yes Where the rules come from (at least one), e.g. the authority's page. (min items 1)
valid_from string (date) yes
valid_to string (date) or null
published_at string (date) or null
id string yes Allowance id.
regime string yes Id of the regime the allowance belongs to.
name string yes Name of the allowance.
description string yes What the allowance permits.
limit string or null Annual cap as a decimal string, in currency; null if none. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
currency string or null ISO 4217 code of the limit.
percent string or null Share of cost allowed in the first year, in percent. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
multiple string or null Declining balance: the highest multiple of the straight-line rate (DE degressive AfA); percent is then the highest rate. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)

AssetClass

Field Type Required Description
sources array of Source yes Where the rules come from (at least one), e.g. the authority's page. (min items 1)
valid_from string (date) yes
valid_to string (date) or null
published_at string (date) or null
id string yes Asset class id, e.g. 'us.macrs.gds.5y'; the asset_class of a schedule. (pattern ^[a-z0-9_.-]+$)
regime string yes Id of the regime the class belongs to.
name string yes Name of the class, e.g. '5-year property'.
examples array of string Typical assets in the class.
method "declining_balance" | "straight_line" | "sum_of_years_digits" | "table" | "units_of_production" yes Depreciation method a schedule uses for the class.
convention "full_year" | "half_year" | "mid_month" | "pro_rata_months" or null First-year convention; null means the regime's default.
useful_life_years string or null Recovery or useful life in years, if the class has one. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
rate_percent string or null Annual rate for rate-based (pool / reducing balance) regimes. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
straight_line_rate_percent string or null Alternative straight-line rate on cost, used when a schedule asks for straight_line (CH: half the declining-balance rate, ESTV Merkblatt A 1995). (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
table string or null DepreciationTable id when method=table.
retirement "keep" | "pool" | "write_off" or null The regime's retirement rule for this class, when it differs: 'keep' for a class that depreciates only down to the value of its land.
reference string or null Legal or administrative reference for the class.

DepreciationMethod

Field Type Required Description
sources array of Source yes Where the rules come from (at least one), e.g. the authority's page. (min items 1)
id "declining_balance" | "straight_line" | "sum_of_years_digits" | "table" | "units_of_production" yes Method id; the value of method in a schedule request.
name string yes Name of the method.
description string yes How the method spreads the cost.
formula string yes The yearly charge as a formula.
parameters array of string Schedule request fields the method needs, e.g. 'useful_life_years'.

DepreciationTable

Published percentage table, e.g. IRS Pub 946 Table A-1.

Field Type Required Description
sources array of Source yes Where the rules come from (at least one), e.g. the authority's page. (min items 1)
id string yes Table id, e.g. 'us.macrs.gds.hy.5y'; the table of a schedule.
regime string yes Id of the regime the table belongs to.
recovery_period_years string yes Recovery period in years. (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
convention "full_year" | "half_year" | "mid_month" | "pro_rata_months" yes The first-year convention the percentages embed.
basis_method string yes e.g. '200DB' or 'SL'
percentages array of string yes Percent of cost depreciated in each year, first year first; they sum to 100.

Envelope_RegimeDetail_

Field Type Required Description
data RegimeDetail yes
meta Meta yes

Envelope_Schedule_

Field Type Required Description
data Schedule yes
meta Meta yes

Envelope_list_DepreciationMethod__

Field Type Required Description
data array of DepreciationMethod yes
meta Meta yes

Envelope_list_Regime__

Field Type Required Description
data array of Regime yes
meta Meta yes

Period

Field Type Required Description
period integer yes
fiscal_year integer yes
fraction string yes (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
opening_book_value string yes (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
depreciation string yes (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
accumulated string yes (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
closing_book_value string yes (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)

Regime

Field Type Required Description
sources array of Source yes Where the rules come from (at least one), e.g. the authority's page. (min items 1)
id string yes Regime id, e.g. 'us.macrs.gds'. (pattern ^[a-z0-9_.]+$)
jurisdiction string yes Country the regime applies in, e.g. 'US'.
name string yes Name of the regime.
basis "book" | "tax" yes 'tax': depreciation for tax returns; 'book': for the financial statements.
description string yes What the regime covers.
methods array of "declining_balance" | "straight_line" | "sum_of_years_digits" | "table" | "units_of_production" yes The depreciation methods the regime allows.
default_convention "full_year" | "half_year" | "mid_month" | "pro_rata_months" or null Convention used for the first year unless a class overrides it.
retirement "keep" | "pool" | "write_off" What a retired asset's remaining value does: 'write_off', deducted in the year of retirement; 'pool', stays in the pool and goes on reducing (UK); 'keep', stays on the books (land). (default "write_off")

RegimeDetail

Field Type Required Description
regime Regime yes The regime itself.
classes array of AssetClass yes Asset classes of the regime in force on meta.as_of, each with the method, useful life or rate, and convention a schedule uses.
tables array of DepreciationTable yes Published percentage tables of the regime (all versions; they are not effective-dated).
allowances array of Allowance yes Caps and first-year allowances of the regime in force on meta.as_of.

Schedule

Field Type Required Description
method "declining_balance" | "straight_line" | "sum_of_years_digits" | "table" | "units_of_production" yes
convention "full_year" | "half_year" | "mid_month" | "pro_rata_months" yes
cost string yes (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
salvage string yes (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
depreciable_base string yes (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
useful_life_years string or null yes (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
rate_percent string or null yes (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
table string or null yes
asset_class string or null yes
total_depreciation string yes (pattern ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$)
periods array of Period yes
notes array of ScheduleNote yes Where the parameters came from and how the schedule ends, each by a code with the values it names and in English.

ScheduleNote

Field Type Required Description
code string yes What the note says, by a stable code.
details object yes The values the note names (rates and amounts as decimal strings).
text string yes The same in English words.

ScheduleRequest

Field Type Required Description
cost decimal string yes Acquisition cost to depreciate, as a decimal string in the asset's currency, e.g. '50000.00'. Must be greater than zero. (greater than 0)
start_date string (date) yes Date the asset is placed in service (ISO 8601). It sets the first fiscal year and, with the convention, the share of that year that is depreciated.
acquisition_date string (date) or null Date the asset was acquired or made, when it differs from start_date (the start of depreciation). A regime that allows declining balance only for acquisitions in a window checks this date (DE § 7 (2) EStG). Default: start_date.
method "declining_balance" | "straight_line" | "sum_of_years_digits" | "table" | "units_of_production" or null straight_line, declining_balance, sum_of_years_digits, units_of_production or table (published percentages). Required unless asset_class supplies it.
asset_class string or null Catalog asset class id; fills method, life, convention, rate and table.
salvage decimal string Residual value at the end of life, as a decimal string; must be less than cost. Default 0. Ignored by the table method. (min 0; default "0")
useful_life_years decimal string or null Useful life in years, e.g. '5' or '12.5'. Required for straight_line and sum_of_years_digits (a whole number for the latter) unless asset_class supplies it. (greater than 0)
convention "full_year" | "half_year" | "mid_month" | "pro_rata_months" or null Share of the first year that is depreciated: full_year, half_year, mid_month (months left, the acquisition month counted as half) or pro_rata_months (months left including the acquisition month). Defaults to the asset class's convention, otherwise full_year.
rate_percent decimal string or null Annual rate in percent for declining_balance, e.g. '20'. Alternative to factor with useful_life_years; overrides the asset class's rate. (max 100; greater than 0)
factor decimal string or null e.g. 2 for double declining. (greater than 0)
switch_to_straight_line boolean declining_balance only: switch to straight line over the remaining life once that gives the larger charge. Default true. (default true)
periods integer or null Number of annual periods to show. Needed for declining_balance without a useful life, which never fully depreciates; for other methods it truncates the schedule. (max 100; greater than 0)
retire_in_period integer or null declining_balance only: the period (1 = the first fiscal year) the asset is retired in. The schedule ends there and what is left above salvage is written off in it, as on scrapping (CH ESTV). Overrides periods. Ignored for a regime that keeps a retired asset in its pool (UK capital allowances) or a class that keeps the value of its land (CH buildings with land), which then shows periods, by default 30. (max 100; greater than 0)
regime string or null Regime id whose retirement rule applies when no asset_class is given, e.g. 'gb.capital_allowances' (a pool). Unknown ids are ignored.
units array of decimal string or null units_of_production only: the units produced or used in each period, as decimal strings, e.g. ['10000', '12000'].
total_units decimal string or null units_of_production only: total units the asset can produce over its life (decimal string); the depreciable base is spread over it. (greater than 0)
table string or null Depreciation table id for the table method, e.g. 'us.macrs.gds.hy.5y' (see GET /v1/fixed-assets/regimes/{regime_id}). Taken from asset_class when omitted.
fiscal_year_end_month integer Month number (1-12) in which the fiscal year ends. Default 12 (calendar year). (min 1; max 12; default 12)
decimals integer Decimal places of the amounts in the schedule (0-6). The last period absorbs the rounding difference. Default 2. (min 0; max 6; default 2)
Stabiso, the Enterprise System of Record · generated from the code and its guides · release 6f03a5e846b3