Templates
Templates define the structure, fields, validity rules, and presentment settings for Ananke Trust documents. Create them once, issue many documents from them.
What is a template?
A template is a reusable document schema that defines what fields a document contains, how it's presented, its document type, and its validity rules. When you issue a document, you reference a template and provide values for its fields.
Templates belong to a tenant and can be managed through the API or the Console.
Creating a template
const template = await client.trust.templates.create({
name: "Professional Certificate",
documentTypeCode: "CERT",
fields: [
{ key: "certNumber", label: "Certificate Number", type: "text", required: true },
{ key: "course", label: "Course Name", type: "text", required: true },
{ key: "grade", label: "Grade", type: "text", required: false },
{ key: "issueDate", label: "Issue Date", type: "date", required: true },
],
});
console.log(template.id); // "tmpl-uuid"curl -X POST https://api.anankelabs.net/v1/trust/templates \
-H "x-api-key: ak_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Professional Certificate",
"documentTypeCode": "CERT",
"fields": [
{ "key": "certNumber", "label": "Certificate Number", "type": "text", "required": true },
{ "key": "course", "label": "Course Name", "type": "text", "required": true }
]
}'Template fields
| Property | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Display name for the template. |
documentTypeCode | string | Yes | Document type code from reference data (e.g. CERT, DIP). |
fields | array | Yes | Array of field definitions. |
description | string | No | Internal description for this template. |
Field types
Each field in the template schema has these properties:
| Property | Description |
|---|---|
key | Unique identifier used when issuing documents. |
label | Human-readable label for the field. |
type | Field type: text, date, number, email, url. |
required | Whether the field must be provided at issuance time. |
Template lifecycle
Templates have two states:
- Active — Can be used to issue new documents.
- Archived — Cannot be used for new issuance, but existing documents remain valid.
// Archive — prevents new issuance
await client.trust.templates.archive(templateId, {
reason: "Replaced by v2 template",
});
// Unarchive — re-enables issuance
await client.trust.templates.unarchive(templateId);Updating templates
You can update a template's name, description, and fields. Changes apply to new issuances only — existing documents are not affected.
await client.trust.templates.update(templateId, {
name: "Professional Certificate v2",
fields: [
{ key: "certNumber", label: "Certificate Number", type: "text", required: true },
{ key: "course", label: "Course Name", type: "text", required: true },
{ key: "grade", label: "Final Grade", type: "text", required: true },
],
});Duplicating templates
Create a copy of an existing template. Useful for versioning or creating variants:
const copy = await client.trust.templates.duplicate(templateId);
console.log(copy.id); // new template IDPlacement settings
Placement settings control how the Ananke Trust document embeds an Ananke TCode barcode (if enabled). These are set via a separate endpoint:
await client.trust.templates.setPlacement(templateId, {
placementTemplateId: "placement-uuid",
});CSV field mapping
For bulk issuance, retrieve the CSV column mapping for a template to build your upload file:
const csvFields = await client.trust.templates.getCsvFields(templateId);
console.log(csvFields);
// [{ column: "certNumber", required: true }, { column: "course", required: true }, ...]Next steps
- Issuance — Use templates to issue documents.
- Guide: Issue a document — End-to-end tutorial.
- Ananke Trust API Reference — Full template endpoint docs.