Skip to content

Dyes

7 endpoints covering the full 136-dye database.

Dye Object

Every dye response includes these fields:

FieldTypeDescription
itemIDintegerGame item ID (negative for Facewear dyes)
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. Ixali Vendor, Cosmic Exploration
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 dyes 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
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
e.g. Red, Neutral, Blue, Facewear
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 (groups A, B, C). This endpoint exposes which dyes belong to which group and whether consolidation is currently active in the game.

GET/v1/dyes/consolidation-groups

Example response:

json
{
  "success": true,
  "data": {
    "consolidationActive": false,
    "groups": [
      {
        "type": "A",
        "consolidatedItemID": null,
        "dyeCount": 35,
        "dyes": [
          { "itemID": 5729, "stainID": 1, "name": "Snow White" },
          ...
        ]
      },
      { "type": "B", "dyeCount": 35, "dyes": [ ... ] },
      { "type": "C", "dyeCount": 35, "dyes": [ ... ] }
    ],
    "unconsolidated": {
      "count": 31,
      "dyes": [ ... ]
    }
  },
  "meta": { ... }
}

Not affiliated with Square Enix.