Skip to content

Dyes

7 endpoints covering the full dye database — 125 standard dyes plus 11 Facewear color entries (with synthetic negative IDs assigned at runtime). 136 entries total.

Dye Object

Every dye response includes these fields:

FieldTypeDescription
itemIDintegerGame item ID (negative synthetic ID for Facewear color entries)
stainIDinteger | nullStain table ID (1–125; null for Facewear)
idintegerSame as itemID
namestringEnglish dye name
localizedNamestring?Present only when localeen
hexstringHex color (#RRGGBB)
rgbobject{ r, g, b } — 0–255
hsvobject{ h, s, v } — hue 0–360, sat/val 0–100
categorystringe.g. Red, Neutral, Facewear
acquisitionstringe.g. Crafting, Cosmic Exploration, The Firmament, Vendor
costintegerVendor price
currencystring | nulle.g. Gil, Cosmocredits, Skybuilders Scrips
isMetallicbooleanMetallic sheen
isPastelbooleanPastel shade
isDarkbooleanDark shade
isCosmicbooleanFrom Cosmic Exploration
isIshgardianbooleanFrom Ishgardian Restoration
consolidationTypestring | nullPatch 7.5 group: A, B, C, or null
marketItemIDintegerItem ID for market board lookups

GET /v1/dyes

List all dyes with filtering, sorting, and pagination. Returns 136 total entries (125 standard dyes + 11 Facewear color entries) across ~3 pages at the default perPage of 50.

Parameters

NameInDefaultDescription
pagequery1Page number
perPagequery50Items per page (1–200)
categoryqueryFilter by category name (e.g. Red, Neutral)
metallicquerytrue/false — filter metallic dyes
pastelquerytrue/false — filter pastel dyes
darkquerytrue/false — filter dark dyes
cosmicquerytrue/false — filter Cosmic Exploration dyes
ishgardianquerytrue/false — filter Ishgardian dyes
vendorquerytrue/false — filter dyes acquired from vendors
craftquerytrue/false — filter dyes acquired by crafting
expensivequerytrue/false — filter premium-cost dyes (curated by EXPENSIVE_DYE_IDS)
consolidationTypequeryFilter by Patch 7.5 group: A, B, C, or none
sortqueryname, brightness, saturation, hue, or cost
orderqueryascasc or desc
localequeryenen, ja, de, fr, ko, or zh
GET/v1/dyes?order=asc&perPage=10&locale=en
categoryquery
Filter by category
sortquery
name, brightness, saturation, hue, cost
orderquery
asc or desc
perPagequery
Items per page (1–200)
localequery
en, ja, de, fr, ko, zh

GET /v1/dyes/:id

Look up a single dye. The ID type is inferred by numeric range — see ID auto-detection.

Parameters

NameInDescription
idpathitemID, stainID (1–125), or Facewear ID (negative)
localequeryLocale for localizedName
GET/v1/dyes/5729?locale=en
idpathrequired
itemID (≥5729), stainID (1–125), or Facewear ID (<0)
localequery
en, ja, de, fr, ko, zh

GET /v1/dyes/stain/:stainId

Explicit stainID lookup — bypasses range-based auto-detection. Use this when you specifically have a stainID and want to be unambiguous.

Parameters

NameInDescription
stainIdpathstainID (positive integer, 1–125)
localequeryLocale for localizedName
GET/v1/dyes/stain/1?locale=en
stainIdpathrequired
stainID (1–125)
localequery
en, ja, de, fr, ko, zh

Search dyes by name. Case-insensitive substring match. Supports localized name search when a non-English locale is specified.

Returns an array (not paginated) of all matching dyes.

Parameters

NameInRequiredDescription
qqueryYesSearch query
localequeryNoSearch against localized names and return localizedName
GET/v1/dyes/search?q=snow&locale=en
qqueryrequired
Case-insensitive substring to match against dye names
localequery
en, ja, de, fr, ko, zh

GET /v1/dyes/categories

List all dye categories with their dye counts.

GET/v1/dyes/categories

Example response:

json
{
  "success": true,
  "data": [
    { "name": "Neutral", "count": 12 },
    { "name": "Red", "count": 14 },
    { "name": "Brown", "count": 8 }
  ],
  "meta": { ... }
}

GET /v1/dyes/batch

Look up multiple dyes by ID in a single request. Returns found dyes and a notFound array for any IDs that didn't resolve.

Parameters

NameInRequiredDescription
idsqueryYesComma-separated IDs (max 50)
idTypequeryNoauto (default), item, or stain
localequeryNoLocale for localizedName
GET/v1/dyes/batch?ids=5729%2C5730%2C5731&idType=auto&locale=en
idsqueryrequired
Comma-separated IDs (max 50)
idTypequery
auto, item, or stain
localequery
en, ja, de, fr, ko, zh

Example response:

json
{
  "success": true,
  "data": {
    "dyes": [ { "itemID": 5729, "name": "Snow White", ... }, ... ],
    "notFound": []
  },
  "meta": { ... }
}

GET /v1/dyes/consolidation-groups

Returns Patch 7.5 consolidation metadata. In Patch 7.5, 105 individual dyes were reorganized into three consolidated dye items (Type-A, Type-B, Type-C). This endpoint exposes which dyes belong to which group and whether consolidation is currently active in the game.

As of Patch 7.5 going live (April 2026), consolidation is active — all three consolidated itemIDs (52254, 52255, 52256) are populated, and the marketItemID field on individual consolidated dyes points to the consolidated item rather than the legacy per-dye itemID. Use this endpoint to discover which legacy itemIDs map to which consolidated parent, e.g. when caching market-board prices.

GET/v1/dyes/consolidation-groups

Example response:

json
{
  "success": true,
  "data": {
    "consolidationActive": true,
    "groups": [
      {
        "type": "A",
        "consolidatedItemID": 52254,
        "dyeCount": 85,
        "dyes": [
          { "itemID": 5729, "stainID": 1, "name": "Snow White" }
        ]
      },
      { "type": "B", "consolidatedItemID": 52255, "dyeCount": 9, "dyes": [] },
      { "type": "C", "consolidatedItemID": 52256, "dyeCount": 11, "dyes": [] }
    ],
    "unconsolidated": {
      "count": 31,
      "dyes": []
    }
  },
  "meta": {}
}

FINAL FANTASY XIV © 2010-2026 SQUARE ENIX CO., LTD. All Rights Reserved.
XIV Dye Tools is a fan-made application and is not affiliated with or endorsed by Square Enix.