---
title: "Publish a new calibration template version for a tool. Template versions are append-only and
immutable: this becomes the tool's new latest version, prior versions remain readable history,
and existing calibration records stay pinned to the version they were measured against.
Reference gages never take a calibration template. Publishes are not idempotent: a retried
request publishes another version — check the latest version before re-sending after a timeout."
method: POST
path: "/api/tools/{toolId}/calibration-template"
tags: ["Tool"]
---

# Publish a new calibration template version for a tool. Template versions are append-only and
immutable: this becomes the tool's new latest version, prior versions remain readable history,
and existing calibration records stay pinned to the version they were measured against.
Reference gages never take a calibration template. Publishes are not idempotent: a retried
request publishes another version — check the latest version before re-sending after a timeout.

`POST /api/tools/{toolId}/calibration-template`

## Path parameters

- `toolId` string, required

## Request body

- ToolRequestCalibrationTemplateCreateDto — Request body for publishing a new calibration template version for a tool. Template versions are append-only and immutable: each publish becomes the tool's new latest version, existing versions remain readable history, and existing calibration records stay pinned to the version they were measured against. The version number and effective range are assigned server-side.
  - `procedureName` string, nullable — The name of the calibration procedure
  - `defaultMasterGageId` string, nullable — The id of the master gauge tool applied to checkpoints that don't specify their own
  - `lowerTolerance` number, double, nullable — The default lower tolerance applied to checkpoints
  - `lowerTolPrecision` integer, nullable — The decimal precision of the lower tolerance
  - `upperTolerance` number, double, nullable — The default upper tolerance applied to checkpoints
  - `upperTolPrecision` integer, nullable — The decimal precision of the upper tolerance
  - `trialsPerCheckpoint` integer, nullable — How many trials each checkpoint requires per phase; between 1 and 100 when specified
  - `minTempDegC` number, double, nullable — The minimum acceptable ambient temperature (deg C) during calibration
  - `maxTempDegC` number, double, nullable — The maximum acceptable ambient temperature (deg C) during calibration
  - `maxRelHumidity` number, double, nullable — The maximum acceptable ambient relative humidity (%) during calibration
  - `instructions` string, nullable — Free-text calibration instructions
  - `checkpoints` ToolRequestCalibrationCheckpointCreateDto[], nullable — The measurement checkpoints, in display order (array position defines the order)
    - `attribute` string, nullable — The characteristic being measured (e.g. "Diameter")
    - `nominal` number, double, nullable — The target/nominal value for the measurement
    - `minimumValue` number, double, nullable — The minimum acceptable measured value (inclusive)
    - `maximumValue` number, double, nullable — The maximum acceptable measured value (inclusive)
    - `precision` number, double, nullable — The decimal precision applied to the nominal value
    - `units` string, nullable — The unit of measure of the measurement
    - `masterGageId` string, nullable — The id of the master gauge tool used to measure this checkpoint; when null the template's default master applies

## Response `200`

The published template version, with its assigned version number and checkpoint ids

- ToolCalibrationTemplateDto — A calibration template version for a tool, with the measurement checkpoints an in-house calibration is measured against.
  - `id` string, uuid — The id of the template version
  - `toolId` string, nullable — The id of the tool this template belongs to
  - `version` integer — The template version number; calibration records pin the version they were measured against
  - `createdUtc` string, date-time — When this version was created (UTC)
  - `source` 'user' | 'vendor' | 'customer' — Who performed the calibration. Mirrors FulcrumProduct.Domain.ToolCalibrations.CalibrationSource by underlying value.
  - `procedureName` string, nullable — The name of the calibration procedure
  - `defaultMasterGage` ToolMasterGageReferenceDto — A master gauge (itself a tool) referenced by a calibration template or checkpoint.
    - `id` string, nullable — The id of the master gauge tool
    - `name` string, nullable — The name of the master gauge tool
    - `toolType` 'bevelProtractor' | 'bendAngleGage' | 'boreGage' | 'caliper' | 'cmm' | 'coatingThicknessGage' | 'depthMicrometer' | 'gageBlocks' | 'hardnessTester' | 'heightGage' | 'micrometer' | 'opticalComparator' | 'pinGage' | 'plugGage' | 'radiusGage' | 'sineBar' | 'surfacePlate' | 'surfaceRoughnessTester' | 'thicknessGage' | 'threadPlugGage' | 'threadRingGage' | 'vmm' | 'attributeGage' | 'calibrationArtifact' | 'indicator' | 'calibrationStandard' | 'chamferGage' | 'lightMeter' | 'presetter' | 'digitalConductivityMeter' | 'ringGage' | 'profilometer' | 'splineGage' | 'tapeMeasure' | 'thermometer' | 'stopwatch' | 'torqueWrench' | 'instantMeasurementSystem' | 'protractor' | 'pressureGage' | 'tubeGage' | 'tubeMicrometer' | 'thermocouple' | 'ohmMeter' | 'multimeter' | 'weight' | 'fixture' | 'machine' | 'hygrothermometer' | 'concentricityGage' | 'cmmDatumSphere' | 'threadMicrometer' | 'insideMicrometer' | 'pinMicrometer' | 'setPlug' | 'nptRingGage' | 'nptPlugGage' | 'grooveMicrometer' | 'weldingEquipment' | 'surfaceTesterMaster' — The type of tool in the calibration system. Member values mirror FulcrumProduct.Domain.ToolCalibrations.Data.ToolType one-to-one (guarded by ToolCalibrationEnumParityTests) so tools map by underlying value.
    - `serialNumber` string, nullable — The serial number of the master gauge tool
    - `nextCalibrationDateUtc` string, date-time, nullable — When the master gauge's own calibration expires (UTC); null when it has never been calibrated
    - `calibrationFrequency` 'recurringDays' | 'recurringMonths' | 'endOfMonth' | 'endOfQuarter' | 'endOfYear' | 'none' — How often the tool requires calibration. Mirrors FulcrumProduct.Domain.Tools.Data.CalibrationFrequency by underlying value.
  - `defaultMasterGageId` string, nullable — The raw default-master id. Set while defaultMasterGage is null means the configured master no longer resolves ("master unavailable"), never "no master configured"
  - `lowerTolerance` number, double, nullable — The default lower tolerance applied to checkpoints
  - `lowerTolPrecision` integer, nullable — The decimal precision of the lower tolerance
  - `upperTolerance` number, double, nullable — The default upper tolerance applied to checkpoints
  - `upperTolPrecision` integer, nullable — The decimal precision of the upper tolerance
  - `trialsPerCheckpoint` integer, nullable — How many trials each checkpoint requires per phase
  - `minTempDegC` number, double, nullable — The minimum acceptable ambient temperature (deg C) during calibration
  - `maxTempDegC` number, double, nullable — The maximum acceptable ambient temperature (deg C) during calibration
  - `maxRelHumidity` number, double, nullable — The maximum acceptable ambient relative humidity (%) during calibration
  - `instructions` string, nullable — Free-text calibration instructions
  - `checkpoints` ToolCalibrationCheckpointDto[] — The measurement checkpoints, in display order
    - `id` string, uuid — The id of the checkpoint; measurement responses reference it
    - `order` integer — Relative position of the checkpoint within the template
    - `attribute` string, nullable — The characteristic being measured (e.g. "Diameter")
    - `nominal` number, double, nullable — The target/nominal value for the measurement
    - `minimumValue` number, double, nullable — The minimum acceptable measured value (inclusive)
    - `maximumValue` number, double, nullable — The maximum acceptable measured value (inclusive)
    - `precision` number, double, nullable — The decimal precision applied to the nominal value
    - `units` string, nullable — The unit of measure of the measurement
    - `masterGage` ToolMasterGageReferenceDto — A master gauge (itself a tool) referenced by a calibration template or checkpoint.
      - `id` string, nullable — The id of the master gauge tool
      - `name` string, nullable — The name of the master gauge tool
      - `toolType` 'bevelProtractor' | 'bendAngleGage' | 'boreGage' | 'caliper' | 'cmm' | 'coatingThicknessGage' | 'depthMicrometer' | 'gageBlocks' | 'hardnessTester' | 'heightGage' | 'micrometer' | 'opticalComparator' | 'pinGage' | 'plugGage' | 'radiusGage' | 'sineBar' | 'surfacePlate' | 'surfaceRoughnessTester' | 'thicknessGage' | 'threadPlugGage' | 'threadRingGage' | 'vmm' | 'attributeGage' | 'calibrationArtifact' | 'indicator' | 'calibrationStandard' | 'chamferGage' | 'lightMeter' | 'presetter' | 'digitalConductivityMeter' | 'ringGage' | 'profilometer' | 'splineGage' | 'tapeMeasure' | 'thermometer' | 'stopwatch' | 'torqueWrench' | 'instantMeasurementSystem' | 'protractor' | 'pressureGage' | 'tubeGage' | 'tubeMicrometer' | 'thermocouple' | 'ohmMeter' | 'multimeter' | 'weight' | 'fixture' | 'machine' | 'hygrothermometer' | 'concentricityGage' | 'cmmDatumSphere' | 'threadMicrometer' | 'insideMicrometer' | 'pinMicrometer' | 'setPlug' | 'nptRingGage' | 'nptPlugGage' | 'grooveMicrometer' | 'weldingEquipment' | 'surfaceTesterMaster' — The type of tool in the calibration system. Member values mirror FulcrumProduct.Domain.ToolCalibrations.Data.ToolType one-to-one (guarded by ToolCalibrationEnumParityTests) so tools map by underlying value.
      - `serialNumber` string, nullable — The serial number of the master gauge tool
      - `nextCalibrationDateUtc` string, date-time, nullable — When the master gauge's own calibration expires (UTC); null when it has never been calibrated
      - `calibrationFrequency` 'recurringDays' | 'recurringMonths' | 'endOfMonth' | 'endOfQuarter' | 'endOfYear' | 'none' — How often the tool requires calibration. Mirrors FulcrumProduct.Domain.Tools.Data.CalibrationFrequency by underlying value.
    - `masterGageId` string, nullable — The checkpoint's raw master gauge id. Set while masterGage is null means the configured master no longer resolves ("master unavailable"), never "no master configured"

## Other responses

- `400` — Validation issues with input
- `404` — Tool did not exist
- `409` — Another caller published a version for this tool at the same time

---

[API](https://skmtc.net/fulcrumpro/apis/fulcrum-publicapi.md) · [All operations](https://skmtc.net/fulcrumpro/apis/fulcrum-publicapi/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/fulcrumpro/fulcrum-publicapi/versions/1b5649cff14a/schema)
