Skip to content
API console (try a request with your own key)Get early access

Templates

A template decides which of the values SpecCapture reads a job keeps, what each is called, and in what order - one that keeps only the columns an ERP import expects, under its own headings, or one for quoting. Templates are made in the SpecCapture dashboard (Fields) by the workspace’s owner or an admin; the API reads them. Every template reads a drawing the same way - all of it, exactly as SpecCapture’s measured reading does - so a template never changes a value: it only chooses which values a job keeps, names them and orders them. A field’s path is its key everywhere and never changes, whatever the template calls it.

GET /v1/templates lists them. The standard template, drawing - every field, table and note SpecCapture reads, under its standard names - is always first; then the workspace’s own, by name. defaultTemplateId is what a submission uses when it names no template:

{
"defaultTemplateId": "6b0d5d2e-3c8a-4f6e-9a7b-2f1e0c9d8b7a",
"templates": [
{ "templateId": "drawing", "name": "Standard (every field)", "version": 1, "isDefault": false,
"definedBy": "speccapture", "updatedAt": null, "url": "/v1/templates/drawing" },
{ "templateId": "6b0d5d2e-3c8a-4f6e-9a7b-2f1e0c9d8b7a", "name": "ERP import", "version": 3, "isDefault": true,
"definedBy": "workspace", "updatedAt": "2026-10-14T09:00:00+00:00", "url": "/v1/templates/6b0d5d2e-3c8a-4f6e-9a7b-2f1e0c9d8b7a" }
]
}

GET /v1/templates/{templateId} gives one template’s fields, tables and notes, in order, at its newest version, or at an earlier one with ?version=:

{
"templateId": "6b0d5d2e-3c8a-4f6e-9a7b-2f1e0c9d8b7a",
"name": "ERP import",
"version": 3,
"currentVersion": 3,
"isDefault": true,
"archived": false,
"definedBy": "workspace",
"publishedAt": "2026-10-14T09:00:00+00:00",
"basedOn": "drawing",
"basedOnVersion": 1,
"fields": [
{ "path": "titleBlock.partNumber", "name": "Item number", "standardName": "Part Number", "order": 1,
"required": true, "alwaysCheck": false, "section": null, "definedBy": "speccapture", "measured": "measured" },
{ "path": "titleBlock.title", "name": "Description", "standardName": "Title", "order": 2,
"required": false, "alwaysCheck": false, "section": null, "definedBy": "speccapture", "measured": "standard" }
],
"tables": [
{ "path": "bom", "name": "Parts", "standardName": "Bill of Materials", "keyColumn": "item",
"columns": [ { "path": "item", "name": "Line", "standardName": "Item" }, { "path": "qty", "name": "Quantity", "standardName": "Quantity" } ] }
],
"notes": null,
"exportLayout": "valuesOnly"
}
  • name is the name the job’s values carry (each value’s name); standardName is SpecCapture’s.
  • required: a drawing that does not give the field waits for a person, the value with the review reason RequiredButNotFound. alwaysCheck: the field’s value always waits for a person, whatever the workspace accepts automatically.
  • measured says what SpecCapture says about the field’s accuracy: measured for the four fields whose accuracy SpecCapture publishes (part number, revision, material, finish), standard for every other field it reads, notMeasured for sizes and counts worked out from the drawing, which always wait for a person.
  • A table keeps its keyColumn (the column that numbers its rows) whatever else it leaves out. notes is null when the template leaves the general notes out.
  • exportLayout is how the job’s CSV and Excel exports are laid out: full, or valuesOnly - one column per field under its name, a value still waiting for review left blank and named in a Waiting for review column, and no sheet ever left out.

Versions. Every change the workspace publishes is a new version; a version never changes afterwards. A job keeps the version it was submitted with - its templateId and templateVersion - for good, so its values, names and exports stay as they were; GET /v1/templates/{templateId}?version=N gives that version. A template the workspace archived still answers here, with archived: true, for the jobs that name it; it cannot be used for new ones.

An id the workspace does not have, another workspace’s included, answers 404 not_found. Any key may read templates.