Garland Tools API Document

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.


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

One thought on “Garland Tools API Document”

  1. > 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

Leave a Reply

Your email address will not be published. Required fields are marked *