Games & Comics — entry 022 of 75
FFXIV Collect
FFXIV Collect is a community-run reference for Final Fantasy XIV's collectable content — mounts, minions, achievements, orchestrion rolls, and more — cross-referenced with each character's owned/missing status and rarity percentage. Its read-only REST API mirrors the site's own data, including per-character collection lookups by Lodestone ID. No key is required, and the full endpoint list is published as a Postman collection.
FFXIV Collect is a keyless read-only mirror of Final Fantasy XIV's collectable content — mounts, minions, achievements, and more — cross-referenced with each item's community-owned percentage. A live GET this run against /mounts/1 returned a genuine 1,136 B bare object at HTTP 200, content-type: application/json; charset=utf-8.
GreatAPIs Score
Auth quickstart
- No API key, signup, or credit card required — the live GET above returned real mount data with no auth header of any kind attached. CORS headers only appear when the request itself carries an
Originheader: a live GET this run withOrigin: https://greatapis.comreturnedaccess-control-allow-origin: *, while the identical request with noOriginheader returned no CORS header at all.
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Look up a single mount by id
GEThttps://ffxivcollect.com/api/mounts/1
{
"id": 1,
"name": "Company Chocobo",
"description": "Summon your Grand Company-issued battle chocobo.",
"enhanced_description": "Born and bred in the city\u2013state of Ishgard, the majority of company chocobos are geldings of the rouncey variety; however, massive destriers and miniature Belah'dian jennets are also raised to accommodate the builds of Roegadyn and Lalafellin riders respectively.",
"tooltip": "Chocobos are stout-hearted creatures, but they have their limits. - Mimigun",
"movement": "Terrestrial",
"seats": 1,
"custom_music": false,
"order": 0,
"order_group": 100,
"patch": "2.0",
"item_id": 6001,
"tradeable": false,
"owned": "96%",
"image": "https://v2.xivapi.com/api/asset?format=webp&path=ui%2Ficon%2F068000%2F068001_hr1.tex",
"icon": "https://v2.xivapi.com/api/asset?format=webp&path=ui%2Ficon%2F004000%2F004001_hr1.tex",
"sources": [
{ "type": "Quest", "text": "My Little Chocobo (Immortal Flames)", "related_type": "Quest", "related_id": 66238 },
{ "type": "Quest", "text": "My Little Chocobo (Maelstrom)", "related_type": "Quest", "related_id": 66237 },
{ "type": "Quest", "text": "My Little Chocobo (Twin Adder)", "related_type": "Quest", "related_id": 66236 }
]
}owned (a percentage string) is on every collectable type checked this run — mounts, minions, and achievements alike. sources (cross-links back to the quests/vendors that grant the item) is not: it is present on mounts and minions but absent from achievements entirely, which carry points/category/type instead.
Try it
Developer reference
https://ffxivcollect.com/api- GET/mounts/{id}
- GET/mounts
- GET/achievements
- GET/minions
Gotchas & limits
- This API has no pagination at all —
?pageis accepted, echoed back, and completely inert. Live this run,/mounts?limit=2returned ids[437, 435]and?limit=2&page=2,&page=3,&page=70,&page=999every one returned the same two ids; same result on/achievementsand/minions. Don't trust thequeryecho as evidence the server honored anything:offset,start,skip,id_gtand even a made-upbogusParamare all echoed intoqueryand all equally no-ops. Whatlimitdoes do is cap the response and silently clamp to the corpus size (?limit=1→ 1,?limit=353→ 353,?limit=400and?limit=1000→ still 353), which is why no total-count field exists: the correct strategy is a single unlimited GET.GET /mountswith no params returned 200, 354,689 B,"count": 353and all 353 mounts in one response. Socounttells you how many came back, never how many exist. - What that one big GET gives you instead of paging is a newest-content-first ordering — the only ordering guarantee on offer, and not mentioned in the Postman-documenter page that serves as the docs (
documenter.getpostman.com, a third host distinct from both the API and the site's own homepage — confirmed live this run, 200,text/html; charset=utf-8). Verified live this run across the full unlimited response of all three collection types (353 mounts, 583 minions, 3,946 achievements):patchdescends monotonically from newest to oldest in every one, with each patch's rows in one contiguous block (mounts and minions open at7.55and end at2.0; achievements end at1.0). So the first N results are the most recently added collectables. Noteidis not monotonic —/mountsopens[437, 435, 430, 429, 337, 446]— so you can't hand-roll paging by id ranges. Don't over-read the within-patch tiebreak either: mounts happen to runorderdescending inside each patch group, but achievements do not and minions carry noorderfield at all, andorder_groupis not a sort key on any of them (mounts'7.51group runs10262, 10254, 10011, 10271, 1240, monotonic in neither direction). - Field sets diverge by collectable type — don't write one parser for all of them.
owned(a percentage string) is on all three types checked live this run, butsourcesis on mounts and minions only and is absent from achievements entirely:/achievements/1,/2,/5,/100and/500each returned the same 10-key shape (id, name, description, points, order, patch, owned, icon, category, type) with nosourceskey at all, while/mounts/1and/minions/1both carry one. Achievements instead havepoints/category/type, and the key set isn't even fixed within the type:/achievements/1000returned those same 10 keys plus an 11th, arewardobject, which/achievements/1does not have (still nosourceson either). Check for a key rather than assuming it. - The 404 shape is the same compact JSON as a success, not a distinct error dialect — a live GET this run against a nonexistent id (
/mounts/999999) returned real HTTP 404, 34 B:{"status":404,"error":"Not found"}, samecontent-type: application/json; charset=utf-8as every 200. Both the 200 and the 404 also carry undocumentedx-runtimeandx-request-idheaders, handy for correlating a specific call when reporting a data issue upstream. - Character lookups (
/characters/{lodestoneId}) 404 for any Lodestone ID that hasn't already been indexed by FFXIV Collect's own crawler — several plausible-looking IDs probed live this run all returned the same{"status":404,"error":"Not found"}shown above. This endpoint only works for characters someone has already looked up on the site itself; it is not a general-purpose Lodestone proxy.