---
title: "Record a tool calibration: an external (vendor or customer) attestation, or an in-house
calibration with per-checkpoint measurements against the tool's current calibration template.
The server derives the result from the measurements and rejects a submitted result that
disagrees; reference gages never take calibration records. A save recording a failure
automatically opens an NCR, echoed as createdNcr. Creates are not idempotent: a retried
request records a second calibration (and opens a second NCR on a failure) — list the tool's
records before re-sending after a timeout."
method: POST
path: "/api/tool-calibrations"
tags: ["Tool Calibration"]
---

# Record a tool calibration: an external (vendor or customer) attestation, or an in-house
calibration with per-checkpoint measurements against the tool's current calibration template.
The server derives the result from the measurements and rejects a submitted result that
disagrees; reference gages never take calibration records. A save recording a failure
automatically opens an NCR, echoed as createdNcr. Creates are not idempotent: a retried
request records a second calibration (and opens a second NCR on a failure) — list the tool's
records before re-sending after a timeout.

`POST /api/tool-calibrations`

## Request body

- ToolCalibrationCreateDto — Request body for recording a tool calibration. Who performed the calibration is attributed per FulcrumProduct.PublicApi.Dto.ToolCalibration.Request.ToolCalibrationCreateDto.CalibrationSource: an in-house (user) calibration names the measuring user, a vendor calibration names the vendor, and a customer calibration is always attributed to the tool's owning customer server-side. The overall result must match the result the server derives from the submitted measurements; the pinned template version, As-Found outcome, and sign state are always derived server-side and cannot be supplied.
  - `toolId` string, required — The id of the tool the calibration was performed on
  - `calibrationSource` 'user' | 'vendor' | 'customer', required — Who performed the calibration. Mirrors FulcrumProduct.Domain.ToolCalibrations.CalibrationSource by underlying value.
  - `calibratedByUserId` string, nullable — The user who performed an in-house calibration; required for (and only valid with) the user source
  - `calibratedByVendorId` string, nullable — The vendor that performed an external calibration; required for (and only valid with) the vendor source
  - `result` 'fail' | 'pass' | 'notApplicable', required — The outcome of a calibration. Mirrors FulcrumProduct.Domain.ToolCalibrations.Data.CalibrationResult by underlying value.
  - `calibrationDateUtc` string, date-time, required — When the calibration was performed (UTC)
  - `masterGageNames` string, nullable — Free-text master gauge names supplied with an external attestation; a measured in-house calibration derives its masters from the template instead
  - `certificateNumber` string, nullable — The external certificate number supplied with the calibration
  - `notes` string, nullable — Free-text notes
  - `asFoundNotes` string, nullable — Free-text notes about the As-Found state
  - `tempDegC` number, double, nullable — Ambient temperature (deg C) captured during calibration
  - `relHumidity` number, double, nullable — Ambient relative humidity (%) captured during calibration
  - `responses` ToolCalibrationRequestCalibrationResponseSaveDto[], nullable — The per-checkpoint trial measurements; only valid on in-house (user-source) calibrations against the tool's current calibration template
    - `calibrationCheckpointId` string, uuid, required — The template checkpoint this measurement answers; must belong to the template version the record is measured against
    - `phase` 'asFound' | 'asLeft', required — The measurement phase of a checkpoint response. Mirrors FulcrumProduct.Domain.ToolCalibrations.Data.CalibrationCheckpointPhase by underlying value.
    - `trial` integer, required — 1-based trial number within the phase for this checkpoint
    - `numericValue` number, double, nullable — The measured numeric value
    - `numericValuePrecision` integer, nullable — The decimal precision of the measured numeric value
    - `booleanValue` boolean, nullable — The measured boolean value, for attribute (pass/fail) checkpoints
    - `stringValue` string, nullable — The measured free-text value
    - `bonusToleranceValue` number, double, nullable — The bonus tolerance applied to the measurement

## Response `200`

The created calibration record, with its derived results and concurrency token

- ToolCalibrationSavedDto — The result of recording or editing a tool calibration record: the persisted record plus, when the save recorded a new failure, the non-conformance report it automatically opened.
  - `id` string, nullable — The id of the calibration record
  - `tool` ToolCalibrationToolReferenceDto — The tool a calibration record belongs to.
    - `id` string, nullable — The id of the tool
    - `name` string, nullable — The name of the 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 tool
  - `calibrationSource` 'user' | 'vendor' | 'customer' — Who performed the calibration. Mirrors FulcrumProduct.Domain.ToolCalibrations.CalibrationSource by underlying value.
  - `calibratedBy` CommonReferenceDto — Represents a reference to a document in a DB collection
    - `id` string, nullable — Unique Id associated to the referenced object
    - `name` string, nullable — Descriptive name associated to the object
  - `result` 'fail' | 'pass' | 'notApplicable' — The outcome of a calibration. Mirrors FulcrumProduct.Domain.ToolCalibrations.Data.CalibrationResult by underlying value.
  - `asFoundResult` 'fail' | 'pass' | 'notApplicable' — The outcome of a calibration. Mirrors FulcrumProduct.Domain.ToolCalibrations.Data.CalibrationResult by underlying value.
  - `calibrationDateUtc` string, date-time, nullable — When the calibration was performed (UTC)
  - `masterGageNames` string, nullable — Display labels of the master gauges used: the masters the record's measurements were taken against for in-house records, or the free-text value supplied with an external record
  - `certificateNumber` string, nullable — The external certificate number supplied with the calibration
  - `notes` string, nullable — Free-text notes
  - `asFoundNotes` string, nullable — Free-text notes about the As-Found state
  - `tempDegC` number, double, nullable — Ambient temperature (deg C) captured during calibration
  - `relHumidity` number, double, nullable — Ambient relative humidity (%) captured during calibration
  - `templateVersion` integer, nullable — The template version the record was measured against, pinned at create time; null for template-less and external records
  - `signedBy` CommonReferenceDto — Represents a reference to a document in a DB collection
    - `id` string, nullable — Unique Id associated to the referenced object
    - `name` string, nullable — Descriptive name associated to the object
  - `signedUtc` string, date-time, nullable — When the record was signed (UTC); null until signed
  - `responses` ToolCalibrationCalibrationResponseDto[] — The per-checkpoint trial measurements; present only on in-house (user-source) calibrations measured against a template
    - `id` string, uuid, nullable — The id of the measurement row
    - `calibrationCheckpointId` string, uuid — The template checkpoint this measurement answers
    - `phase` 'asFound' | 'asLeft' — The measurement phase of a checkpoint response. Mirrors FulcrumProduct.Domain.ToolCalibrations.Data.CalibrationCheckpointPhase by underlying value.
    - `trial` integer — 1-based trial number within the phase for this checkpoint
    - `numericValue` number, double, nullable — The measured numeric value
    - `numericValuePrecision` integer, nullable — The decimal precision of the measured numeric value
    - `booleanValue` boolean, nullable — The measured boolean value, for attribute (pass/fail) checkpoints
    - `stringValue` string, nullable — The measured free-text value
    - `bonusToleranceValue` number, double, nullable — The bonus tolerance applied to the measurement
    - `createdOnUtc` string, date-time, nullable — When the measurement was recorded (UTC)
    - `createdBy` CommonReferenceDto — Represents a reference to a document in a DB collection
      - `id` string, nullable — Unique Id associated to the referenced object
      - `name` string, nullable — Descriptive name associated to the object
    - `masterGageExpirationUtc` string, date-time, nullable — The measurement's master gauge calibration expiry (UTC) frozen when the row was saved; null when no master gauge was configured
  - `version` string, nullable — The record's opaque concurrency token, refreshed by every write. Round-trip it unchanged on an edit; the edit is rejected with 409 Conflict when the record changed after this read
  - `createdNcr` ToolCalibrationNcrReferenceDto — A non-conformance report opened by a failing calibration save.
    - `id` string, nullable — The id of the NCR
    - `number` integer — The NCR's sequential number

## Other responses

- `400` — Validation issues with input
- `404` — Tool did not exist

---

[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)
