---
title: "Create a tool. A calibration frequency of none creates a reference gage, which is never due
for calibration and takes no calibration records; every other frequency requires the last
calibration date. The tool's sequential number is assigned server-side. Creates are not
idempotent: a retried request creates a second tool — list tools before re-sending after a
timeout."
method: POST
path: "/api/tools"
tags: ["Tool"]
---

# Create a tool. A calibration frequency of none creates a reference gage, which is never due
for calibration and takes no calibration records; every other frequency requires the last
calibration date. The tool's sequential number is assigned server-side. Creates are not
idempotent: a retried request creates a second tool — list tools before re-sending after a
timeout.

`POST /api/tools`

## Request body

- ToolCreateDto — Request body for creating a tool. The tool's sequential number, computed next calibration due date, and latest-calibration outcome are always derived server-side.
  - `name` string, required — The name of the tool
  - `serialNumber` string, nullable — The serial number 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', required — 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.
  - `toolStatus` 'active' | 'inactive' — Whether the tool is in service. Mirrors FulcrumProduct.Domain.Tools.Data.ToolStatus by underlying value.
  - `toolInactiveReason` 'lost' | 'damaged' | 'requiresRepair' | 'retired' | 'outForCalibration' — Why an inactive tool is out of service. Mirrors FulcrumProduct.Domain.Tools.Data.ToolInactiveReason by underlying value.
  - `calibrationFrequency` 'recurringDays' | 'recurringMonths' | 'endOfMonth' | 'endOfQuarter' | 'endOfYear' | 'none', required — How often the tool requires calibration. Mirrors FulcrumProduct.Domain.Tools.Data.CalibrationFrequency by underlying value.
  - `calibrationInterval` integer, nullable — The interval count paired with a recurring calibration frequency (days or months); must be null for a reference gage
  - `lastCalibrationDateUtc` string, date-time, nullable — When the tool was last calibrated (UTC); required unless the tool is a reference gage
  - `outForRecalibrationDateUtc` string, date-time, nullable — When the tool left the shop for recalibration (UTC). Required when the inactive reason is outForCalibration, and must be null for every other reason (tandem validation)
  - `notes` string, nullable — Free-text notes
  - `defaultUnitOfMeasureName` string, nullable — The unit of measure the tool measures in; must be a standard unit of measure
  - `measurementRangeMin` number, double, nullable — The lower bound of the tool's measurement range
  - `measurementRangeMax` number, double, nullable — The upper bound of the tool's measurement range
  - `accuracy` number, double, nullable — The tool's rated accuracy
  - `accuracyPrecision` integer, nullable — The decimal precision of the rated accuracy
  - `customerId` string, nullable — The customer that owns the tool; null for shop-owned tools. A customer-owned tool only takes customer-source calibration records
  - `locationId` string, nullable — The location of the tool

## Response `200`

The created tool, with its assigned number and computed calibration schedule

- ToolDto — A tool (measurement instrument or gage) tracked by the calibration system.
  - `id` string, nullable — The id of the tool
  - `number` integer, nullable — The tool's sequential number, unique within the tenant (displayed as T-{number})
  - `name` string, nullable — The name of the tool
  - `serialNumber` string, nullable — The serial number 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.
  - `toolStatus` 'active' | 'inactive' — Whether the tool is in service. Mirrors FulcrumProduct.Domain.Tools.Data.ToolStatus by underlying value.
  - `toolInactiveReason` 'lost' | 'damaged' | 'requiresRepair' | 'retired' | 'outForCalibration' — Why an inactive tool is out of service. Mirrors FulcrumProduct.Domain.Tools.Data.ToolInactiveReason by underlying value.
  - `calibrationFrequency` 'recurringDays' | 'recurringMonths' | 'endOfMonth' | 'endOfQuarter' | 'endOfYear' | 'none' — How often the tool requires calibration. Mirrors FulcrumProduct.Domain.Tools.Data.CalibrationFrequency by underlying value.
  - `calibrationInterval` integer, nullable — The interval count paired with a recurring calibration frequency (days or months)
  - `lastCalibrationDateUtc` string, date-time, nullable — When the tool was last calibrated (UTC)
  - `nextCalibrationDateUtc` string, date-time, nullable — When the tool's next calibration is due (UTC, computed); null for reference gages and never-calibrated tools
  - `lastCalibrationResult` 'fail' | 'pass' | 'notApplicable' — The outcome of a calibration. Mirrors FulcrumProduct.Domain.ToolCalibrations.Data.CalibrationResult by underlying value.
  - `lastCalibratedBy` 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
  - `customer` 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
  - `location` 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
  - `notes` string, nullable — Free-text notes
  - `defaultUnitOfMeasureName` string, nullable — The unit of measure the tool measures in
  - `measurementRangeMin` number, double, nullable — The lower bound of the tool's measurement range
  - `measurementRangeMax` number, double, nullable — The upper bound of the tool's measurement range
  - `accuracy` number, double, nullable — The tool's rated accuracy
  - `accuracyPrecision` integer, nullable — The decimal precision of the rated accuracy
  - `modifiedUtc` string, date-time, nullable — When the tool was last modified (UTC); supports incremental sync
  - `outForRecalibrationDateUtc` string, date-time, nullable — When the tool left the shop for recalibration (UTC). Null means the tool is on site; a value means it has been out since that date, and requires the outForCalibration inactive reason

## Other responses

- `400` — Validation issues with input

---

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