---
title: "Returns detailed information for a filament roll by ID."
method: GET
path: "/api/Filaments/{id}"
tags: ["Filaments"]
---

# Returns detailed information for a filament roll by ID.

`GET /api/Filaments/{id}`

## Request

- Base URL: `https://api.3dprintlog.com`
- URL: `https://api.3dprintlog.com/api/Filaments/{id}`
- Auth: one of:
  - OAuth 2 (authorization code, authorization URL `https://3dprintlog.auth0.com/authorize`, token URL `https://3dprintlog.auth0.com/oauth/token`)
  - API key in header `X-Api-Key`
  - API key in query parameter `api_key`

## Path parameters

- `id` string, uuid, required

## Response `200`

The Filament details on success.

- PrintLogApiModelsDTOsFilamentFilamentDetailDto
  - `id` string, uuid, required
  - `spoolNumber` integer, nullable: The user's own number for this spool (1, 2, 3…), which Spoolman clients use as its id. Read-only: assigned on create, never reused, and ignored on PUT.
  - `displayName` string, required: Common name for the roll of filament.
  - `brand` string, nullable
  - `materialCategoryNickname` string, nullable
  - `materialType` string, required: The material Type, ie PLA, PETG, ABS.
  - `materialDensityGramPerCubicCm` number, double: The Density of the Material
  - `colorName` string, nullable
  - `colorHex` string, nullable
  - `diameterMm` number, double, nullable
  - `source` 1 | 2 | 3: Which field is the user-entered "source" Sent as an integer: `1` = Weight, `2` = Length, `3` = Volume.
  - `initialNominalVolumeMl` number, double, nullable: The initial volume of the material in millileters
  - `initialNominalLengthM` number, double, nullable: The initial length of the material in meters
  - `initialTotalWeightMg` integer, nullable
  - `initialNominalWeightMg` integer, nullable: The initial nominal weight of the filament in milligrams.
  - `spoolWeightMg` integer, nullable: The weight of the spool in milligrams.
  - `filamentRemaining` integer, nullable: Server-computed remaining filament weight in milligrams (InitialNominalWeightMg minus print usage plus weight adjustments). Null when nominal weight is not set. Read-only: ignored on write.
  - `filamentLengthRemainingInM` number, double, nullable: Server-computed remaining length in meters, converted from FilamentRemaining so the three readouts always describe the same spool. Null when the nominal weight is not tracked, and null for materials with no diameter - resin and powder have no length. Get-only: a client-supplied value cannot reach the server.
  - `filamentVolumeRemainingInMl` number, double, nullable: Server-computed remaining volume in milliliters, converted from FilamentRemaining. Deliberately NOT accumulated from the per-usage VolumeMl columns: a usage row written without normalization carries milligrams and no volume, and summing the volume column then silently under-counts the spool. Get-only: a client-supplied value cannot reach the server.
  - `printCount` integer: Distinct prints that used this filament. Read-only: ignored on write.
  - `totalUsedMg` integer: Total milligrams consumed by prints, actual where recorded and estimated otherwise - the same rule FilamentRemaining subtracts. Read-only: ignored on write.
  - `tempRangeStart` number, double, nullable
  - `tempRangeEnd` number, double, nullable
  - `recommendedTemp` number, double, nullable: The user's recommended temperature
  - `recommendedBedTemp` number, double, nullable: The user's recommended bed temperature
  - `isActive` boolean
  - `purchaseDate` string, date-time, nullable
  - `purchaseLocation` string, nullable: The location (either URL, or physical location where the filament was purchased)
  - `purchasePriceValue` string, nullable
  - `purchasePriceCurrency` string, nullable: The Currency Marker (ie, USD)
  - `purchaseNotes` string, nullable: Any notes about the purchase price
  - `storageLocation` string, nullable: Where is this filament stored?
  - `notes` string, nullable
  - `isFavorite` boolean
  - `initialLayerTimeS` number, double, nullable: The initial layer cure time in seconds
  - `layerTimeS` number, double, nullable: The layer cure time in seconds (after the initial layers)
  - `meltingTemperature` number, double, nullable: Melting temperature of the material
  - `inertGas` string, nullable: What inert gas should be used?
  - `materialRefreshRatio` number, double, nullable: The percentage of new powder when mixing with old powder. 1.0 means always use new powder.
  - `filamentAdjustments` PrintLogApiModelsDTOsFilamentFilamentAdjustmentDto[], nullable
    - `id` string, uuid
    - `filamentId` string, uuid, required
    - `source` 1 | 2 | 3: Which field is the user-entered "source" Sent as an integer: `1` = Weight, `2` = Length, `3` = Volume.
    - `amountMg` integer, nullable: An amount to adjust the weight of a filament. Amounts are added to the weight of the filament: <list type="bullet"><item>Positive Adjustment Amounts mean the addition of filament to the roll.</item><item>Negative Adjustment Amounts mean the removal of filament of the roll.</item></list>
    - `lengthInM` number, double, nullable: The length of filament used in meters. Amounts are added to the weight of the filament: <list type="bullet"><item>Positive Adjustment Amounts mean the addition of filament to the roll.</item><item>Negative Adjustment Amounts mean the removal of filament of the roll.</item></list>
    - `volumeMl` number, double, nullable: The volume of filament used in milliliters Amounts are added to the Volume of the filament: <list type="bullet"><item>Positive Adjustment Amounts mean the addition of filament to the roll.</item><item>Negative Adjustment Amounts mean the removal of filament of the roll.</item></list>
    - `notes` string, nullable
    - `createdDate` string, date-time
    - `updatedDate` string, date-time
  - `colorPattern` 1 | 2 | 3 | 4: Sent as an integer: `1` = Solid, `2` = Multi, `3` = Gradient, `4` = Rainbow.
  - `finishType` 1 | 2 | 3: Sent as an integer: `1` = Standard, `2` = Silk, `3` = Matte.
  - `colors` string[], nullable
  - `effects` PrintLogApiEnumsFilamentEffect[], nullable
  - `tagUids` string[], nullable: RFID or NFC tag UIDs on this spool, as uppercase hex without separators (`04A23F11`), in order. Always a list in responses. On PUT, any case and separators are accepted and the list replaces the spool's tags; leave it out (or null) to keep them, which is what clients that predate tags do. A UID already on another of the user's spools is a 409 naming that spool.
  - `tagReadings` PrintLogApiModelsDTOsSpoolTagsTagReadingInputDto[], nullable: Decoded tag readings to keep with the spool's tags, matched to `TagUids` by UID. A reading for a UID that is not in `TagUids` is ignored. When a spool is updated, a tag's stored reading is replaced only when a new one is sent for it.
    - `uid` string, nullable: The tag UID the reading came from, in any case and with any separators.
    - `reading` PrintLogApiSpoolTagsTagReading: What a decoder found on a spool tag, in one shape for every tag format. Not a DTO: it is the domain shape and is serialized as-is. A null scalar means "not on the tag".
      - `format` string, nullable
      - `decoderVersion` integer
      - `brand` string, nullable
      - `manufacturer` string, nullable
      - `materialType` string, nullable
      - `materialSubtype` string, nullable
      - `materialSubtypeCode` integer, nullable
      - `colors` string[], nullable: Six-digit uppercase hex, no leading hash.
      - `alpha` integer, nullable: 1-255. 0 is treated as unset (null) by the sanitizer.
      - `diameterMm` number, double, nullable
      - `netWeightG` integer, nullable
      - `lengthM` integer, nullable
      - `hotendMinC` integer, nullable
      - `hotendMaxC` integer, nullable
      - `firstLayerHotendC` integer, nullable
      - `hotendC` integer, nullable
      - `bedMinC` integer, nullable
      - `bedMaxC` integer, nullable
      - `dryTempC` integer, nullable
      - `dryHours` integer, nullable
      - `sku` string, nullable
      - `manufacturedOn` string, date, nullable
      - `extras` object, nullable
      - `warnings` string[], nullable
  - `tagDetails` PrintLogApiModelsDTOsSpoolTagsFilamentTagDetailDto[], nullable: Response-only: the spool's tags with their last decoded reading, ordered by UID. Inbound it is ignored. A reading whose stored JSON cannot be read comes back null.
    - `uid` string, nullable
    - `format` string, nullable
    - `reading` PrintLogApiSpoolTagsTagReading: What a decoder found on a spool tag, in one shape for every tag format. Not a DTO: it is the domain shape and is serialized as-is. A null scalar means "not on the tag".
      - `format` string, nullable
      - `decoderVersion` integer
      - `brand` string, nullable
      - `manufacturer` string, nullable
      - `materialType` string, nullable
      - `materialSubtype` string, nullable
      - `materialSubtypeCode` integer, nullable
      - `colors` string[], nullable: Six-digit uppercase hex, no leading hash.
      - `alpha` integer, nullable: 1-255. 0 is treated as unset (null) by the sanitizer.
      - `diameterMm` number, double, nullable
      - `netWeightG` integer, nullable
      - `lengthM` integer, nullable
      - `hotendMinC` integer, nullable
      - `hotendMaxC` integer, nullable
      - `firstLayerHotendC` integer, nullable
      - `hotendC` integer, nullable
      - `bedMinC` integer, nullable
      - `bedMaxC` integer, nullable
      - `dryTempC` integer, nullable
      - `dryHours` integer, nullable
      - `sku` string, nullable
      - `manufacturedOn` string, date, nullable
      - `extras` object, nullable
      - `warnings` string[], nullable
    - `lastReadAt` string, date-time, nullable
  - `catalogEntryId` string, nullable: The catalog entry the spool was created from. Response-only: a PUT never changes it.
  - `images` PrintLogApiModelsDTOsFilamentFilamentImageDto[], nullable: Response-only, populated by `FilamentService.HydrateDetailImageUrlsAsync`. This DTO doubles as the PUT request body, so a caller can send anything here — nothing reads it inbound. `Filament` has no `Images` navigation, so AutoMapper has nowhere to map it to; if one is ever added, this needs an explicit `Ignore()` on the `FilamentDetailDto -> Filament` map or it becomes an injection path.
    - `id` integer
    - `url` string, nullable: Signed, inline, bucketed-expiry URL. Null if signing failed.
    - `thumbnailUrl` string, nullable: Thumbnail URL; falls back to PrintLogApi.Models.DTOs.Filament.FilamentImageDto.Url when no thumbnail exists.
    - `isDefault` boolean
    - `displayOrder` integer

## Other responses

- `401`: Unauthorized
- `403`: Returned when the requested filament does not belong to the current user.
- `404`: Returned when a filament with that GUID does not exist.

---

[API](https://skmtc.dev/3dprintlog/apis/3d-print-log-api.md) · [All operations](https://skmtc.dev/3dprintlog/apis/3d-print-log-api/llms.txt) · [OpenAPI document](https://skmtc.dev/3dprintlog/apis/3d-print-log-api/revisions/dfc3a4df4e38?raw)
