Instrument templates API
List, read, create, update, publish, and delete instrument templates through the DALP Platform API and SDK, and hide or show templates per organisation with the isHidden filter and toggle.
An instrument template is a reusable issuance pattern for the Asset Designer. Each template groups an asset class, a deployable asset type, required token features, feature defaults, and the metadata fields DALP collects during issuance. DALP seeds a set of system templates and lets each organisation add its own.
Use these endpoints when an integration manages templates directly, instead of through the Console. For the operator workflow, see Instrument templates and Create a custom template.
System and organisation templates
Each template carries an isSystem flag.
- System templates are seeded by DALP and shared across organisations. Any caller with read access can list and read them, but their definition cannot be changed through this API.
- Organisation templates belong to the organisation that created them. Only that organisation can read, update, publish, or delete its own templates.
A template is identified by its id and addressed by a slug. The slug is unique per organisation. A template is created as a draft and becomes immutable in key fields once published.
Endpoints
| Endpoint | Use it for |
|---|---|
GET /api/v2/settings/asset-type-templates | List instrument templates in the active organisation. |
POST /api/v2/settings/asset-type-templates | Create a draft instrument template. |
GET /api/v2/settings/asset-type-templates/{id} | Read one instrument template. |
PUT /api/v2/settings/asset-type-templates/{id} | Update a template, or hide and show it per organisation. |
PUT /api/v2/settings/asset-type-templates/{id}/publish | Publish a draft template. |
DELETE /api/v2/settings/asset-type-templates/{id} | Delete a template. |
Read responses use the DALP single-resource envelope with data and links.self. List responses use the collection envelope with data, meta, and pagination links. Delete responses return { "data": null }.
Required roles
| Operation | Roles (any of) |
|---|---|
| List, read | admin, systemManager, tokenManager |
| Create, update, publish, delete | admin, systemManager |
Set the participant and wallet context with the standard request headers before calling these endpoints. See Request headers.
Template fields
Each instrument template returns these fields:
| Field | Type | Description |
|---|---|---|
id | string | Stable identifier for the template. |
name | string | Display name, 1 to 255 characters. |
slug | string | URL-safe identifier, unique within the organisation. |
description | string or null | Optional description. |
assetClass | string | Slug of the asset class this template belongs to. |
assetClassId | string or null | Owning asset class identifier. null for templates that use the system class mapping. |
typeId | string | Concrete asset type slug, such as bond or deposit. |
baseAssetType | string | Deployable base asset type that determines pricing fields. |
isSystem | boolean | true for DALP-seeded system templates, false for organisation templates. |
isDraft | boolean | true while the template is a draft, false once published. System templates are not drafts. |
isHidden | boolean | true when the active organisation has hidden this template. Computed per organisation. |
hiddenFromSidebar | boolean | true when the template is hidden from the Asset Designer sidebar. Mutable on all templates. |
version | number | Increments on each definition change. Visibility changes do not bump the version. |
requiredFeatures | array | Token features the template requires. |
metadataSchema | object or null | Metadata fields the Asset Designer collects during issuance. |
featureConfig | object or null | Default feature settings the template applies. |
organizationId | string or null | Owning organisation. null for shared system templates. |
createdBy | string or null | User who created the template. |
createdAt | string | Creation timestamp. |
updatedAt | string | Last update timestamp. |
List templates
GET /api/v2/settings/asset-type-templates returns the system templates plus the active organisation's templates.
The list supports pagination, global search, sorting by name, createdAt, or updatedAt, and filtering by assetClass, typeId, isSystem, isDraft, or isHidden. Default sort is by name, with system templates ordered first.
By default the list returns both visible and hidden templates. Add filter[isHidden]=false to return only the templates visible to the active organisation, or filter[isHidden]=true to return only the hidden set. isHidden is filterable but not sortable, because it is computed per organisation rather than stored on the template.
curl --globoff "https://your-platform.example.com/api/v2/settings/asset-type-templates?filter[isHidden]=false&sort=name" \
-H "x-api-key: YOUR_API_KEY"{
"data": [
{
"id": "f0c1a2b3-4d5e-6789-abcd-ef0123456789",
"name": "Senior secured bond",
"slug": "senior-secured-bond",
"description": null,
"assetClass": "fixed-income",
"assetClassId": null,
"typeId": "bond",
"baseAssetType": "bond",
"isSystem": false,
"isDraft": false,
"isHidden": false,
"hiddenFromSidebar": false,
"version": 2,
"requiredFeatures": [],
"metadataSchema": null,
"featureConfig": null,
"organizationId": "org_123",
"createdBy": "user_456",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"meta": {
"total": 1,
"facets": { "isSystem": [{ "value": "false", "count": 1 }] }
},
"links": {
"self": "/v2/settings/asset-type-templates?filter[isHidden]=false&sort=name&page[offset]=0&page[limit]=50",
"first": "/v2/settings/asset-type-templates?filter[isHidden]=false&sort=name&page[offset]=0&page[limit]=50",
"prev": null,
"next": null,
"last": "/v2/settings/asset-type-templates?filter[isHidden]=false&sort=name&page[offset]=0&page[limit]=50"
}
}Create, read, and delete
POST /api/v2/settings/asset-type-templates creates a draft template. Send a name, a typeId, a baseAssetType, and an optional description, assetClassId, requiredFeatures, metadataSchema, or featureConfig. DALP derives the slug from the name.
GET /api/v2/settings/asset-type-templates/{id} returns one template. The active organisation can read its own templates and any system template.
DELETE /api/v2/settings/asset-type-templates/{id} removes an organisation template.
PUT /api/v2/settings/asset-type-templates/{id}/publish transitions a draft to published. A published template locks its typeId and baseAssetType so existing deployments keep working.
Update a template
PUT /api/v2/settings/asset-type-templates/{id} updates an organisation template. Send only the fields you want to change. Any definition change bumps version. A published template cannot change its typeId or baseAssetType.
System templates are read-only for their definition. A request that changes name, description, type, asset class, features, or metadata on a system template returns DALP-0161. Only visibility preferences can be changed on a system template.
Hide and show a template
Hiding a template removes it from the Asset Designer selection step so operators can no longer pick it for new assets. Assets already issued from the template are unaffected. Visibility is tracked per organisation: when you hide a template, only your organisation's visible-only views drop it, and other organisations are unaffected.
Send isHidden on the update endpoint to toggle visibility. The CLI does not expose this toggle; use the API or SDK. Unlike definition edits, visibility can be changed on any template the organisation can see, including shared system and default templates:
isHidden: truehides the template for the active organisation.isHidden: falseshows it again.
curl -X PUT "https://your-platform.example.com/api/v2/settings/asset-type-templates/f0c1a2b3-4d5e-6789-abcd-ef0123456789" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "isHidden": true }'The response returns the template with its updated isHidden value. A visibility toggle does not bump version. You can combine isHidden with definition fields in one request on an organisation template. On a system template, send isHidden alone, because definition fields are rejected.
To list only the templates your integration should offer for issuance, request the visible published set with filter[isHidden]=false&filter[isDraft]=false. To review and restore hidden templates, request filter[isHidden]=true.
Errors
| Error ID | Status | When it happens | Recovery |
|---|---|---|---|
DALP-0091 | 404 | A read, update, publish, or delete could not find the template in scope. | Verify the ID, ownership scope, and indexing state, then retry. |
DALP-0161 | 409 | A definition edit targeted a system template. | System definitions cannot be modified. Create an organisation template, or send only isHidden. |
DALP-0463 | 409 | The name collides with an existing organisation template. | Choose a unique template name, or update the existing template instead. |
For the full catalog, see the Platform API error reference.
SDK
The SDK exposes these operations under settings.assetTypeTemplates. Hiding and showing a template is available through the API and SDK.
const list = await client.settings.assetTypeTemplates.list({ query: {} });
const visibleOnly = await client.settings.assetTypeTemplates.list({
query: { filter: { isHidden: "false" } },
});
const one = await client.settings.assetTypeTemplates.read({ params: { id: list.data[0].id } });
await client.settings.assetTypeTemplates.update({
params: { id: one.data.id },
body: { isHidden: true },
});SDK errors expose the same id, status, and retryable fields as the REST envelope. See the SDK reference and error handling.
Related pages
- Instrument templates covers the operator workflow, including the Asset Designer and template visibility switches.
- Asset class definitions manages the asset class catalog that groups templates, with the same per-organisation visibility model.
- Operational integration patterns covers discovering deployed tokens and configured asset classes.
- Platform API error reference covers structured error handling.