Final Fantasy XIV Non-Official Garland Database API document
This one is In English. The next post is Chinese one.
apiBase = "https://garlandtools.org/api/"
It will be abbreviated as ./
in this post.
base = "https://garlandtool.org/"
It will be abbreviated as /
in this post.
I can’t type ‘$’ in code section. So I will use ‘&’ instead, which meant it was the parameter that you passed in before.
My English sucks. If you have any problem reading this, just ask me at the garland discord server in #void channel. I’m CyanClay#3305, active at 2 A.M. to 8 P.M. of UTC+0, or 9 P.M. to next day 11 A.M. of UTC-5, which was 10:00 to 24:00 in UTC+8.
Contents
There are Contents in the left section of the page on Desktop webpage. Use it in your way to navigate.
Read this first
Looks like directly accessing the php is not allowed, for links like ./get.php?id=1&type=item&lang=en&version=3
is rewrited to https://www.garlandtools.org/db/doc/quest/en/2/66196.json
for better caching, rewriting format is /db/doc/{type}/{lang}/{version}/{id}.json
better use it in your request.
Get info about the specified item by ID
Single Query
GET /db/doc/{type}/{lang}/{version}/{id}.json
GET ./get.php
GET ./get.php?id=1&type=item&lang=en&version=3
GET ./get.php?id=190&type=fishing&lang=jp&version=2
Parameters
Parameter | Meaning | Values |
---|---|---|
id | The ID of your queried thing. Such as ItemID or NodeID. | |
type | The TYPE of your query. It can be one in this. | achievement, action, browse, fate, fishing, item, leve, map, mob, node, npc, quest, questlore, status, venture |
lang | The LANGUAGE of your query. | en, ja, fr, de |
version | Internal version code, and it’s a fixed value. | leve, item, core are 3, questlore is 1, All other things are 2 |
Return
The result_JsonObject will be introduced in the specified section.
If this thing relates to something else, a Partial of the related thing will be appended to the related_Partials JArray.
It will looks like:
{
"&type": result_JsonObject,
"partials": [related_Partials[]]
}
Such as:
{
"item": {
"id": 1,
"description":"Standard Eorzean currency.",
"name": "Gil",
.......
}
}
Each Partial will be in this structure:
{
"type": Partial_Type, // One of those types
"id": Partial_ID, // ID of item in this type
"obj": Partial_Object // The actual partial thing
}
Muliple Query
GET ./get.php?id=2,3,4,5&type=item&lang=en&version=3
Parameter
Uses the same parameter logic like single one. Only this is different.
Parameter | Meaning | Value |
---|---|---|
id | Use comma , to split ids, You can only input up to 100 ids a time. |
\ |
Return
The result_JsonObject will be introduced in the specified section.
It will looks like:
[
{
"id": "&id[0]",
"obj": {
"&type": result_JsonObject,
"partials": [related_Partials[]]
}
},
{
"id": "&id[1]",
"obj": {
"&type": result_JsonObject
"partials": [related_Partials[]]
}
},
……
]
Such as:
[
{
"id": "2",
"obj": {
"item": {
"id": 2,
"description":"A tiny crystalline manifestation of aetheric fire energy.",
"name": "Fire Shard",
.......
},
"partials": [{
"type": "instance",
"id": "50",
"obj": {
"i": 50,
"n": "Shisui of the Violet Tides",
"c": 61801,
"t": "Dungeons",
"min_lvl": 63,
"max_lvl": 64,
"min_ilvl": 245
}
},
{
"type": "instance",
"id": "52",
"obj": {
"i": 52,
"n": "The Sirensong Sea",
"c": 61801,
"t": "Dungeons",
"min_lvl": 61,
"max_lvl": 62,
"min_ilvl": 240
},
........
]
}
},
{
"id": "3",
"obj": {
"item": {
"id": 3,
"description":"A tiny crystalline manifestation of aetheric ice energy.",
"name": "Ice Shard",
.......
},
"partials": [{
"type": "instance",
"id": "50",
"obj": {
"i": 50,
"n": "Shisui of the Violet Tides",
"c": 61801,
"t": "Dungeons",
"min_lvl": 63,
"max_lvl": 64,
"min_ilvl": 245
}
},
{
"type": "instance",
"id": "52",
"obj": {
"i": 52,
"n": "The Sirensong Sea",
"c": 61801,
"t": "Dungeons",
"min_lvl": 61,
"max_lvl": 62,
"min_ilvl": 240
},
........
]
}
},
……
]
Search
The search process will match any word in Start of your input. Ignores upper or lower cases.
For example, in item Hydrozoan Umbrella
:
Input | Match? |
---|---|
Umbrella | ✓ |
Umbre | ✓ |
Hydro | ✓ |
hydro | ✓ |
zoan | ✕ |
In item 戦果記録:人形使いジルブリスベル
:
Input | Match? |
---|---|
戦果記録 | ✓ |
戦果 | ✓ |
人形使いジルブリスベル | ✓ |
人形使 | ✓ |
いジルブリスベル | ✕ |
As mysql indexing problems, this sucks for non-space-seperating languages. If you are trying to search in Japanese, try use xivapi or cafemaker.
./search.php
./search.php?text=Hydrozoan%20Umbrella&type=item&exact=1
./search.php?text=Aetherial&type=item&rarity=7&ilvlMin=55&ilvlMax=110
Parameters
All the fields is not required. you can take them away, but at least keep one when searching.
Parameter | Meaning | Value | Required |
---|---|---|---|
text | What you are going to search. | string | ✕ |
type | The TYPE of your search. | achievement, action, browse, fate, fishing, item, leve, map, mob, node, npc, quest, status, venture | ✕ |
exact | Search for the exactly same item name. | Including this in the query means true, no matter what value was appended, even false. | ✕ |
$filter | If you are searching for Items, the filter of items you searching | in next grid | ✕ |
Filter | Meaning | Value | Required |
---|---|---|---|
ilvlMin | Mimimum item level | int | ✕ |
ilvlMax | Maximum item level | int | ✕ |
elvlMin | Minimum equip level | int | ✕ |
elvlMax | Maximum equip level | int | ✕ |
pvp | Only used when searching an pvp Action or Item | Only be True if included. | ✕ |
craftable | craftable | Only be True if included. | ✕ |
desynthable | desynthable | Only be True if included. | ✕ |
collectable | collectable, can be put into the collect box. | Only be True if included. | ✕ |
rarity | Item rarity. Some recipe scroll 0, Commom 1,Green 2,Blue 3,Purple 4,Pink 7 | int | ✕ |
itemCategory | item Category | string | ✕ |
itemCategories | item Categories | str[], split with , |
✕ |
jobCategories | job Categories in id. listed in Core section. | ✕ | |
clvlMin | Minimum level to craft | int | ✕ |
clvlMax | Maximum level to craft | int | ✕ |
craftJob | craft Job id, which listed in Core section. | job id, Only one job is supported | ✕ |
ids | item id | str[], split with , |
✕ |
Returns
A Json Array consisted by searchPartials.
The result_Partial will be introduced in the specified section.
[
{
"type": result_type,
"id": result_id,
"obj": result_Partial
},
{
"type": result2_type,
"id": result2_id,
"obj": result2_Partial
},
……
]
For ./search.php?text=Umbrella
Result looks like:
[{
"type": "item",
"id": "7773",
"obj": {
"i": 7773,
"n": "Umbrella Fig",
"l": 39,
"c": 25010,
"t": 54,
"g": 5,
"r": 1
}
}, {
"type": "item",
"id": "7754",
"obj": {
"i": 7754,
"n": "Umbrella Fig Seeds",
"l": 70,
"c": 27458,
"t": 82,
"g": 12,
"r": 1
}
},
......
]
Weather
GET ./weather.php
Query for weathers of all maps.
No parameter is required.
Returns
{
"Limsa Lominsa": ["Fog", "Fair Skies", "Clear Skies", "Fair Skies", "Clouds", "Rain", "Clear Skies", "Clear Skies", "Fog", "Clear Skies"],
"Limsa Lominsa Upper Decks": ["Fog", "Fair Skies", "Clear Skies", "Fair Skies", "Clouds", "Rain", "Clear Skies", "Clear Skies", "Fog", "Clear Skies"],
"Limsa Lominsa Lower Decks": ["Fog", "Fair Skies", "Clear Skies", "Fair Skies", "Clouds", "Rain", "Clear Skies", "Clear Skies", "Fog", "Clear Skies"],
"Middle La Noscea": ["Fog", "Wind", "Clear Skies", "Fair Skies", "Clouds", "Rain", "Clear Skies", "Clear Skies", "Fog", "Clear Skies"],
"Lower La Noscea": ["Fog", "Wind", "Clear Skies", "Fair Skies", "Clouds", "Rain", "Clear Skies", "Clear Skies", "Fog", "Clear Skies"],
"Eastern La Noscea": ["Clouds", "Fair Skies", "Clear Skies", "Fair Skies", "Clear Skies", "Showers", "Clear Skies", "Clear Skies", "Clouds", "Clear Skies"],
"Western La Noscea": ["Wind", "Clouds", "Fair Skies", "Fair Skies", "Fog", "Gales", "Clear Skies", "Fair Skies", "Wind", "Clear Skies"],
"Upper La Noscea": ["Thunder", "Fog", "Fair Skies", "Clouds", "Clear Skies", "Thunderstorms", "Fair Skies", "Fair Skies", "Thunder", "Clear Skies"],
"Gridania": ["Clear Skies", "Clear Skies", "Fair Skies", "Fair Skies", "Rain", "Fair Skies", "Clouds", "Fair Skies", "Clear Skies", "Fog"],
...........
Core
Some data are used frequently so they are extracted as Core data.
The core data can be accessed by
https://garlandtools.org/db/doc/core/{languageCode}/3/data.json
https://garlandtools.org/db/doc/core/en/3/data.json
./get.php?id=data&type=core&lang=en&version=3
The core data is consisted by these things:
- current patch number and all patch names.
- exp required for each level to upgrade.
- job indexes.
- dye indexes.
- gathering node bonus indexes.
- place name indexes.
- weather indexes.
- quest genre indexes.
- retainer venture indexes.
- action category indexes.
- achievement category indexes.
- item category indexes.
- some crystal item datas.
Get the core data , reformat it and see what it contains, will be much more efficient than me speaking or listing them here.
Returned Objects and Partials
Get icon by icon ID
If you want to get the icon, you need icon id and type.
The icon is stored like this:
https://garlandtools.org/files/icon/{TYPE}/{ICONID}.png
Some item’s 128×128 icon has not been scraped yet, you can /shout in discord and ping me for update.
Some item doesn’t have 128×128 icon.
ffxiv.cyanclay.xyz provides 80x icon for them,
garlandtools.org provides 40x icon for them.
or you can get icons through xivapi.
Action
Note that using an item, such as using potions, having meals or using Lost skill in Bozja are Action.
JsonObject
To be continued.
Partial
Character | Fullname | Values |
---|---|---|
i | id | |
n | name | |
c | icon | See Get icon by icon ID |
j | job | |
t | category | Weaponskill, Ability, Spell |
l | lvl | level requirements |
Achievement
JsonObject
To be continued.
Partial
Character | Fullname | Values |
---|---|---|
i | id | id |
n | name | |
c | icon | See Get icon by icon ID |
t | category | |
b | varies by content. | If this achievement has a reward item, this will be the name ofnthat item. Otherwise it will be the first 50 character of the description of it. |
Leve
JsonObject
To be or not to be? It’s a question.
Partial
Character | Fullname | Values |
---|---|---|
i | id | id |
n | name | |
l | lvl | level of the leve quest |
j | jobCategory | DoW, DoM, DoL, DoH |
p | areaId | the map id of where the leve can be accepted. It’s a place name id, See Core section |
Fate
JsonObject
Wow, You can really Coding!
Partial
Be cautious that some values would not be included here.
Promised things will be always there.
Character | Fullname | Values | Promised |
---|---|---|---|
i | id | id | ✓ |
n | name | namd | ✓ |
l | lvl | level of the fate | ✓ |
t | type, One of these thing: | Slay Enemies, Notorious Monster, Gather, Defense, Escout, Path, EurekaNM, Festival(For seasonal activities), Rebuild(Ishgard Firmament), Carnival(Firmament Fête), Bozjan Fight, Bozjan NM, Bozjan Gather, Bozjan Defense, Unknown | ✓ |
z | zoneId | the map’s placename id of the fate, See Core section | ✕ |
c | coords | map coordinate of the fate | ✕ |
Quest
Lore
For quest lore data, like dialogues, cutscene, you need to fetch type=questlore and version=1 with the same ID.
e.g. For quest 38001 (Some random number made up for example)
Quest basic data is accessed by
/db/doc/quest/en/2/38001.json
Quest lore data is accessed by
/db/doc/questlore/en/1/38001.json
JsonObject
Fate can be cruel, but a smile better suits a hero.
Partial
Character | Fullname | Values | Promised |
---|---|---|---|
i | id | id | ✓ |
n | name | name | ✓ |
l | lvl | quest level | ✓ |
g | genre | the genre id of the quest. there are too many of them, I will not list them here. See Core section or here https://github.com/xivapi/ffxiv-datamining/blob/master/csv/JournalGenre.csv , The first column, ‘Key’ | ✓ |
l | location | The place Name of where the quest can be accepted. | ✓ |
s | sort | SortKey, in which position of this genre. | ✓ |
r | repeatable | repeatable | ✕ |
f | unlockFunction | unlocks something | ✕ |
NPC
JsonObject
Do you know what “Stroking a fish” means in Chinese? That’s what am I doing here. Idleing and leave things undone here.
Partial
Character | Fullname | Values | Promised |
---|---|---|---|
i | id | id | ✓ |
n | name | name | ✓ |
s | hasShop | have shop? will return how many shop he/she/it holds | ✕ |
q | hasQuest | have quest? will return how many quest he/she/it issues | ✕ |
k | hasTalk | have small talk? will return how many talk he/she/it have | ✕ |
t | title | Normally, It will be what does this npc do. Like “Junkmongers” or “Levemete”. | ✕ |
r | trade | Support trading? (Some special shop) | ✕ |
a | areaid | map placename id, See Core section | ✕ |
c | coords | coordinate | ✕ |
Mob
Due to the end-service of Libra Eorzea, the supply of mob data has gone. Currently data only avalible to patch 4.x. This will be fixed somehow in the future, about 2022 Spring, when I finished my business now.
JsonObject
Remember…remember us…
Partial
Character | Fullname | Values | Promised |
---|---|---|---|
i | id | id | ✓ |
n | name | name | ✓ |
l | lvl | mob level | ✓ |
z | zoneid | map placename id, See Core section | ✕ |
t | instance | if the mob is in instance, this will be the instance’s name | ✕ |
Item
JsonObject
Remember…that we once coded…
Partial
Character | Fullname | Values | Promised |
---|---|---|---|
i | id | id | ✓ |
n | name | name | ✓ |
l | ilvl | item level | ✓ |
c | icon | See \ |
✓ |
t | category | utem category | ✓ |
p | price | npc gil shop price | ✕ |
materia | materia | I don’t know what this means | ✕ |
Fishing Spots
JsonObject
<0/204> of becoming Ebisu the Grandmaster Caster.
Partial
Character | Fullname | Values | Promised |
---|---|---|---|
i | id | id | ✓ |
n | name | name | ✓ |
l | lvl | spot level | ✓ |
c | category | One of this: Ocean Fishing, Freshwater Fishing, Dunefishing, Skyfishing, Cloudfishing, Hellfishing, Aetherfishing, Saltfishing | ✓ |
z | zoneid | map place name id, See Core section | ✕ |
x | x | coordinate x | ✕ |
y | y | coordinate y | ✕ |
Node
Gathering node.
JsonObject
Together, we would travel the lands and cross the seas and take to the skies upon the eternal wind… My heart swells simply to imagine it.
Partial
Character | Fullname | Values | Promised |
---|---|---|---|
i | id | id | ✓ |
n | name | name | ✓ |
l | lvl | level | ✓ |
t | type | Mineral Deposit, Rocky Outcropping, Mature Tree, Lush Vegetation | ✓ |
z | zoneid | map placename id | ✓ |
s | stars | stars of the node, for Folklore Items | ✕ |
lt | limitType | Unspoiled, Legendary, Ephemeral | ✕ |
ti | time | avaliable time, it’s an array such as [6, 7, 8] | ✕ |
Statuses
Status Effect
JsonObject
Then…I would ask her about her next adventure. And if she should wish me to be a part of it, oh…how happy it would make me.
Partial
Character | Fullname | Values | Promised |
---|---|---|---|
i | id | id | ✓ |
n | name | name | ✓ |
c | icon | , See Icon section | ✓ |
t | category | Benificial, Detrimental | ✓ |
> Do you know what “Stroking a fish” means in Chinese? That’s what am I doing here. Idleing and leave things undone here.
Exactly what I’m doing now lol