Discover the domain model
Overview
ERP.net exposes JSON endpoints that allow applications and developers to discover the Domain API model without querying business data directly.
These endpoints are useful when you need to:
- inspect the available repositories
- compare the standard product model with the current instance model
- generate integrations, clients, or metadata-driven UI
- discover repository members such as attributes, references, child collections, and bound methods
This topic covers these endpoints:
/api/domain/standardmodel/api/domain/standardmodel/{entitySet}/api/domain/currentmodel/api/domain/currentmodel/{entitySet}
The standardmodel endpoints expose the default ERP.net model without instance-specific extensions.
The currentmodel endpoints expose the live model of the current ERP.net instance, including instance-specific extensions such as custom and calculated attributes.
Getting started
Get the standard model
Use the standard model when you need the baseline ERP.net model, independent of a specific instance customization.
GET /api/domain/standardmodel
This returns a JSON array of repositories in compact form.
The standardmodel endpoint allows anonymous access.
Get the current instance model
Use the current model when your application must reflect the actual structure of a specific ERP.net instance.
GET /api/domain/currentmodel
This returns a JSON array of repositories from the current instance model.
The currentmodel endpoint requires authentication.
Get one repository
To retrieve one repository in detail, append the entity set name to the URL.
GET /api/domain/currentmodel/Crm_Sales_SalesOrders
GET /api/domain/standardmodel/Crm_Sales_SalesOrders
The {entitySet} segment uses underscores (_) instead of dots (.).
For example:
Crm_Sales_SalesOrdersin the URL corresponds to repositoryCrm.Sales.SalesOrders
When a single repository is requested, the response is always detailed, even if the details query parameter is not provided.
Get the full detailed model
Both collection endpoints support the optional query parameter details=true.
GET /api/domain/standardmodel?details=true
GET /api/domain/currentmodel?details=true
When details=true is specified, the response for every repository includes:
AttributesReferencesChildCollectionsMethods
This allows applications to retrieve the entire model structure in a single request.
However, details=true produces a significantly larger payload. Prefer the compact form for repository discovery, and use details=true only when your application really needs the full model structure at once.
Concepts
Standard model vs. current model
Use /api/domain/standardmodel when you need the default ERP.net product model.
Use /api/domain/currentmodel when you need the live model of a specific ERP.net instance.
The current model may contain instance-specific extensions that do not exist in the standard model, such as:
- custom properties
- calculated attributes
Compact vs. detailed responses
The collection endpoints support two response modes:
| Mode | How to request it | Typical use |
|---|---|---|
| Compact | /standardmodel or /currentmodel |
Discover repositories quickly |
| Detailed | /standardmodel?details=true or /currentmodel?details=true |
Load the full repository structure for all repositories |
In compact mode, member-level collections such as Attributes, References, ChildCollections, and Methods are omitted.
In detailed mode, those collections are included for every repository.
For a single repository request such as /currentmodel/{entitySet}, the response is always detailed.
URL entity set format
The single-repository endpoints use the entity set name in underscore form.
| URL segment | Repository name |
|---|---|
Crm_Sales_SalesOrders |
Crm.Sales.SalesOrders |
General_Documents_DocumentTypes |
General.Documents.DocumentTypes |
Internally, the endpoint converts underscores to dots before resolving the repository.
Serialization behavior
The responses are serialized as JSON and enum values are returned as strings.
For collection responses:
- in compact mode, null-valued properties are omitted from the JSON
- in detailed mode, null-valued properties are preserved in the JSON
This matters if your client distinguishes between a missing property and a property explicitly returned as null.
Top-level repository structure
Each repository object contains the following top-level fields.
| Field | Description |
|---|---|
Name |
Repository name in underscore form, suitable for URL usage |
TableName |
Primary database table name, when applicable |
RepositoryName |
Repository name in dotted form |
LocalizedName |
Localized display name |
LocalizedDescription |
Localized description |
IsAggregateRoot |
Indicates whether the repository is an aggregate root |
AggregateParent |
Aggregate parent repository, in underscore form |
AggregateRoot |
Aggregate root repository, in underscore form |
ObjectType |
Full EDM object type name |
Category |
Repository category |
UIVisibility |
UI visibility classification |
Attributes |
Included only in detailed responses |
References |
Included only in detailed responses |
ChildCollections |
Included only in detailed responses |
Methods |
Included only in detailed responses |
Attribute structure
When detailed information is included, each item in Attributes contains metadata for a repository attribute.
Internal attributes are excluded from the Attributes collection.
| Field | Description |
|---|---|
Name |
Attribute name as exposed in the API model |
ColumnName |
Physical column name, when applicable |
Type |
EDM type name |
LocalizedName |
Localized display name |
LocalizedDescription |
Localized description |
IsCustomProperty |
Indicates whether the attribute is a custom property |
IsCalculatedDataAttribute |
Indicates whether the attribute is calculated |
SupportsAllowedValues |
Indicates whether the attribute has an allowed values provider |
LimitToAllowedValues |
Indicates whether values are restricted to the allowed values set |
CategoryId |
Attribute category identifier |
CategoryLocalizedName |
Localized attribute category name |
IsBlob |
Indicates whether the attribute stores binary content |
SupportsSet |
Indicates whether the attribute can be set |
ReadOnly |
Indicates whether the attribute is read-only |
IsPersistent |
Indicates whether the attribute is persisted |
BaseInfo |
Low-level metadata object for the attribute |
enumValues |
Present for enum attributes; lists allowed enum values with localization |
Enum attribute values
For enum attributes, the enumValues collection contains:
| Field | Description |
|---|---|
Value |
The raw enum value |
Name |
The enum member name |
LocalizedName |
Localized enum value name |
LocalizedDescription |
Localized enum value description |
Reference structure
When detailed information is included, each item in References describes a repository reference.
| Field | Description |
|---|---|
Name |
Reference name as exposed in the API model |
ColumnName |
Backing column name, when applicable |
Type |
EDM type name |
LocalizedName |
Localized display name |
LocalizedDescription |
Localized description |
ReferencedEntitySet |
Target entity set name |
ReferencedType |
Full target EDM type name |
CategoryId |
Category identifier, when available |
CategoryLocalizedName |
Localized category name, when available |
ReadOnly |
Indicates whether the reference is read-only |
IsOwnership |
Indicates whether the reference is an ownership relation |
IsFilterable |
Indicates whether the reference is filterable |
IsAggregateParent |
Indicates whether the reference points to the aggregate parent |
BaseInfo |
Low-level metadata object, when the reference is backed by an attribute |
Child collection structure
When detailed information is included, each item in ChildCollections describes a child collection of an enterprise repository.
| Field | Description |
|---|---|
Name |
Child collection name |
LocalizedName |
Localized display name |
LocalizedDescription |
Localized description |
ReadOnly |
Indicates whether the collection is read-only |
DefaultVisibleIndex |
Default visibility order index |
ChildObjectType |
Full EDM type name of the child object |
ChildEntitySet |
Child entity set name |
ChildCollections are available only for repositories that expose them.
Method structure
When detailed information is included, each item in Methods describes a bound operation for the repository type.
| Field | Description |
|---|---|
Name |
Operation name |
Namespace |
Operation namespace |
EntitySetPath |
Entity set path |
ReturnType |
Return type, or void when there is no return value |
IsAction |
Indicates whether the operation is an action |
Parameters |
Operation parameters |
Each method parameter contains:
| Field | Description |
|---|---|
Name |
Parameter name |
Type |
Full EDM type name |
BaseInfo structure
In detailed responses, the BaseInfo property exposes low-level metadata for an attribute.
The JSON object returned in BaseInfo is based on the BaseAttributeInfo class.
BaseInfo is included:
- for items in
Attributes - for items in
References, when the reference is backed by an attribute
Use BaseInfo when your application needs implementation-oriented metadata such as filter support, storage details, nullability, ordering, display hints, subtype classification, or Open Exchange behavior.
| Field | Type | Description |
|---|---|---|
RepositoryName |
string |
Full repository name of the attribute, when available |
LogicalOrder |
int |
Logical order used when displaying, creating, cloning, or importing objects |
Internal |
bool |
Indicates whether the attribute is intended for internal use |
Nullable |
bool? |
Indicates whether the attribute allows null values |
IsDelayLoading |
bool |
Indicates whether the attribute uses delayed loading |
Orderable |
bool? |
Indicates whether the attribute can participate in ordering |
Indexed |
bool |
Indicates whether the attribute participates in a table index as first column |
MaxLength |
int |
Maximum length for text values |
Precision |
int |
Total number of decimal digits for numeric values |
Scale |
int |
Number of digits after the decimal separator for decimal values |
DateTimeStorageType |
string |
Storage mode for DateTime values |
DateTimeUtc |
bool |
Indicates whether date-time values are stored in UTC |
SupportedFilters |
string |
Supported filter capabilities for the attribute |
IsFilterableReference |
bool |
Indicates whether the attribute represents a reference that can be filtered through fields of the referenced entity |
SecurityCrucial |
bool |
Indicates whether referenced-object security should be applied to the referencing object |
AllowTrackChanges |
bool |
Indicates whether changes to the attribute create tracking change sets |
DefaultValueType |
string |
Default value behavior for the attribute |
BaseTableName |
string |
Data-access base table from which the attribute is inherited |
BaseColumnName |
string |
Data-access base column from which the attribute is inherited |
Description |
string |
Description shown alongside the attribute |
DisplayType |
string |
Preferred display type in the presentation layer |
SummaryType |
string |
Default summary type in the presentation layer |
WidthType |
string |
Preferred width in the presentation layer |
RequiresUserInput |
bool |
Indicates that the attribute requires user input and does not support a null value without a late system default |
Obsolete |
bool |
Indicates whether the attribute is obsolete |
DefaultFormat |
string |
Default format string |
UIVisibility |
string |
User interface visibility classification |
Options |
string |
Bit-flag options describing specific presentation or behavior traits |
Subtype |
string |
Specific subtype classification for the attribute |
UnitExpression |
string |
Expression that returns the measurement unit or currency for quantity or amount attributes |
OpenExchangeAttributeName |
string |
Attribute name to use in Open Exchange format, when different from the standard name |
ExportInOpenExchange |
bool |
Indicates whether the attribute participates in Open Exchange export |
BaseInfo.SupportedFilters
SupportedFilters is a flags enum.
| Value | Meaning |
|---|---|
NotFilterable |
No filtering is supported |
Equals |
Equality filtering is supported |
GreaterThanOrLessThan |
Range-style comparison filtering is supported |
Like |
Pattern matching is supported |
EqualsIn |
Set-based equality filtering is supported |
BaseInfo.DefaultValueType
| Value | Meaning |
|---|---|
None |
No default value |
Constant |
Constant default value |
NewGuid |
New GUID is generated by default |
CurrentDate |
Current date is used by default |
CurrentDateTime |
Current date and time are used by default |
CurrentDateTimeUtc |
Current UTC date and time are used by default |
BaseInfo.DisplayType
| Value | Meaning |
|---|---|
Inline |
Single-line inline display |
InlineBlock |
Multiline inline-block display |
InlineDropDown |
Single-line display with a dropdown multiline editor |
ExternalPanel |
External panel with multiline editor |
BaseInfo.WidthType
| Value | Meaning |
|---|---|
Default |
Default width |
Short |
Short width |
Long |
Long width |
BaseInfo.SummaryType
| Value | Meaning |
|---|---|
None |
No summary |
Count |
Count summary |
Sum |
Sum summary |
Average |
Average summary |
Min |
Minimum summary |
Max |
Maximum summary |
StandardDeviation |
Standard deviation summary |
StandardDeviationPercent |
Standard deviation percentage summary |
BaseInfo.Options
Options is a flags enum.
| Value | Meaning |
|---|---|
None |
No special option is set |
InterpolatedString |
The attribute may contain string interpolation expressions |
SecuritySensitiveString |
The attribute contains sensitive string data such as passwords, secrets, or API keys |
BaseInfo.Subtype
| Value | Meaning |
|---|---|
NonSpecific |
No specific subtype |
Binary_Picture |
Binary picture content |
DateTime_Utc |
UTC date-time value |
Decimal_Amount |
Amount value |
Decimal_Percent |
Percent value |
Decimal_Quantity |
Quantity value |
Int_AutoNumber |
Auto-number integer value |
String_Code |
Code string |
String_DataFilter |
Data filter XML |
String_EntityName |
Entity or table name |
String_Html |
HTML content |
String_Identifier |
Identifier string |
String_MultilanguageString |
Encoded multilanguage string |
String_Rtf |
RTF content |
String_UserLogin |
User login value |
String_StrictCode |
Strict code string |
String_Password |
Secret password string |
String_Interpolated |
Interpolated string content |
String_Repository |
Repository name |
String_Markdown |
Markdown content |
String_FileName |
File name |
Example
{
"Name": "DocumentNo",
"Type": "Edm.String",
"LocalizedName": "Document No",
"ReadOnly": false,
"BaseInfo": {
"RepositoryName": "General.Documents.DocumentNo",
"LogicalOrder": 120,
"Internal": false,
"Nullable": false,
"IsDelayLoading": false,
"Orderable": true,
"Indexed": true,
"MaxLength": 20,
"Precision": 0,
"Scale": 0,
"DateTimeStorageType": "None",
"DateTimeUtc": false,
"SupportedFilters": "Equals",
"IsFilterableReference": false,
"SecurityCrucial": true,
"AllowTrackChanges": true,
"DefaultValueType": "None",
"BaseTableName": "Gen_Documents",
"BaseColumnName": "Document_No",
"Description": "User-visible document number.",
"DisplayType": "Inline",
"SummaryType": "None",
"WidthType": "Default",
"RequiresUserInput": false,
"Obsolete": false,
"DefaultFormat": null,
"UIVisibility": "ShownByDefault",
"Options": "None",
"Subtype": "String_Code",
"UnitExpression": null,
"OpenExchangeAttributeName": null,
"ExportInOpenExchange": true
}
}