Quick Start
The XIV Dye Tools API is a public REST API serving the FFXIV dye database and color matching algorithms. Responses are JSON in one envelope.
Base URL
Every endpoint is prefixed with /v1.
https://data.xivdyetools.app/v1Your first request
Fetch Snow White (stainID 1). This is the same console card every reference page uses — Send makes the request from your browser, and nothing is fetched until you tap it.
/v1/dyes/1One dye, by itemID or stainID — the range decides which.One dye, by itemID or stainID — the range decides which.
cURL$ curl https://data.xivdyetools.app/v1/dyes/1JavaScriptconst r = await fetch('https://data.xivdyetools.app/v1/dyes/1');
const { data } = await r.json();Every /v1 response has the same { success, data, meta } envelope (meta.locale appears only when a non-English locale was requested). See Responses for the full spec.
ID auto-detection
Most ID endpoints accept any of three numeric ID types. The type is inferred by range:
| Range | Type | Example |
|---|---|---|
1 – 254 | stainID (game stain table; 126+ reserved for future dyes) | 1 = Snow White |
≥ 5729 | itemID (game item database) | 5729 = Snow White |
< 0 | Legacy Facewear ID — explanatory 404 (no longer served as dyes) | -1629 |
255 – 5728 | (invalid gap) | Returns 404 |
# All three resolve to Snow White
curl https://data.xivdyetools.app/v1/dyes/1 # stainID
curl https://data.xivdyetools.app/v1/dyes/5729 # itemID
curl https://data.xivdyetools.app/v1/dyes/stain/1 # explicit stainIDLocalization
Add ?locale= to any dye endpoint to get localized names. Supported: en, ja, de, fr, ko, zh.
curl https://data.xivdyetools.app/v1/dyes/1?locale=ja{
"data": {
"name": "Snow White",
"localizedName": "スノウホワイト",
...
}
}Next: Reference
| Section | Endpoints |
|---|---|
| Dyes | /v1/dyes/* — lookup, filtering, search, batch, consolidation groups |
| Color Matching | /v1/match/* — closest dye, dyes within a distance |
| Character Equipment | /v1/chara/* — .chara gear resolution and item icons |
| Harmony | /v1/wheels/*, /v1/harmony/* — the five colour wheels and a dye for every harmony slot |
The Reference overview lists every endpoint, most with a live sample from the API.
Planned: community presets, and optional API keys for higher rate limits.
Rate limits
Anonymous requests: 60 per minute per IP. Responses include X-RateLimit-Remaining and X-RateLimit-Reset headers. See Rate Limits.