---
id: rest-1-information-model
slug: /apis/rest-1/information-model
title: 'Information Model'
description: 'Asset types, attribute definitions, assets, attributes and moments - the five concepts the whole Agility API is built on.'
sidebar_label: 'Information Model'
sidebar_position: 2
tags: ['rest-1', 'concepts', 'moment', 'history', 'information-model']
---

<!--
Originally extracted from DocSource/rest-1/rest-1.xml in Core, the source of the
in-product API help. That sync is retired and DocSource is frozen, so this page is
maintained here like any other. The corrections made during extraction are listed in
scripts/README.md.
-->

See [Moments and history](/concepts/moments-and-history) for a fuller treatment of moments and how they drive `Hist` and `asof` queries.

:::info[History in Agility]

In a more general sense, history is made up of events that occur at specific times or moments. Consider running into an old friend at exactly 9:32 PM. At that exact moment an event occured, you and an old friend met. In Agility a change to an asset is an event, which causes a specific moment to be recorded in the history. (A few attributes, such as rank order, are exceptions — their changes are not recorded.)

For example changing a Story asset then changing a Scope asset would occur at two different times or moments. When a specific asset changes its own individual history is marked as changing as part of that moment. So for example, you create a brand new Story asset, it may get marked with moment number 203. If you then update the Story To Do attribute, the Story will be marked as having changed at moment number 204. If someone else then updates a Member Name attribute, the Member will be marked with moment number 205. Moment numbers are sequential, but are maintained globally for the entire Agility instance. The next global change in the system will be marked with moment 206.

In the above example the Story history will have been marked with two distinct moment numbers. The first being moment number 203, the moment the asset was created and the second being when the To Do attribute was changed, at moment number 204. As mentioned above moment numbers are not sequential for a specific asset, they are sequential for the entire instance. Between the time you created the Story asset and the time you changed its To Do attribute, another user may have changed an entirely different asset in the instance, thus making a gap in between your Story asset's moments.

:::

Practically all data in Agility is stored in the form of assets, which have attributes. Each asset is classified by an asset type, which describes a number of attribute definitions, operations, rules, and possibly an inheritance from another asset type.

## Asset Type {#infomodel-assettype}

Asset types describe the "classes" of business data available. Asset types form an inheritance hierarchy, such that each asset type inherits attribute definitions, operations, and rules from its "parent" asset type. Those asset types at the leaves of this hierarchy are *concrete*, whereas asset types with "children" asset types are *abstract*. Assets are all instances of concrete asset types. Asset types are identified by unique names.

By way of example, Story and Defect are concrete asset types. On the other hand, Workitem is an abstract asset type, from which Story and Defect ultimately derive.

## Attribute Definition {#infomodel-attribdef}

Attribute definitions describe the properties that "make up" each asset type. An attribute definition defines the type of its value, whether it is required and/or read-only, and many other qualities. Attribute definitions are identified by a name that is unique within its asset type.

Attribute definitions are defined as either scalars or relations to other assets. Further, relation attribute definitions can be either single-value or multi-value. For example, the Estimate attribute definition on the Workitem asset type is a scalar (specifically, a floating-point number). On the other hand, the Workitem asset type's Scope attribute definition is a single-value relation (to a Scope asset). The reverse relation, Workitems on the Scope asset type, is a multi-value relation (to Workitem assets).

## Asset {#infomodel-asset}

Actual business objects in Agility are assets, which are instances of concrete asset types. Each asset is uniquely identified by it's asset type and ID (an integer). For example, *Member:20* identifies the Member asset with ID of 20.

## Attribute {#infomodel-attribute}

On every asset are a number of attributes, which attach specific values to the attribute definitions defined in the asset type. If the attribute's definition is a relation, then the value(s) of the attribute are references to an asset(s).

## Moment {#infomodel-history}

As data changes in Agility, a history is maintained. Every change to every asset is journaled within the system, and assigned a chronologically-increasing integer called a *moment*. A past version of an asset is uniquely identified by it's asset type, ID, and Moment. A past version of a relation attribute will refer to the past version of it's target asset. For example, *Member:20:563* identifies the Member asset with ID of 20, as it was at the time of moment 563.
