BYTETOOLS

moogleAPI

Free Final Fantasy API with no key spanning the whole franchise: characters with race, role and affiliation, every mainline game, and monsters, with artwork. Live example.

No API key requiredHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the moogleAPI?

moogleAPI is a free REST API covering the Final Fantasy franchise as a whole rather than one title. It serves characters with their race, role, affiliation and home town, the mainline games with release years and platforms, and monsters, each with generated artwork.

Franchise-wide coverage is the point here. Where XIVAPI goes deep on a single title's data sheets, moogleAPI goes wide: a character record carries `gameName` and `releaseYear`, so you can build cross-game views — everyone from Final Fantasy VII, or every Kobold across the series — that a per-game API cannot answer. Records also carry a `popularity` integer, which is unusual and makes for an easy default sort when you have nothing better.

Set expectations about density before you build. Many fields are null on minor characters: our capture of the first page showed `role`, `affiliation`, `hometown` and `abilities` all null on some entries and populated on others, and default ordering is a plain string sort on name, which puts `13th Order Fugleman Zo Ga` and `2B` ahead of anything beginning with a letter. In our capture the `limit` parameter did not reduce the page size, so page through and trim client-side rather than assuming it will be honoured. The API also does not send CORS headers, so browser calls need a proxy.

Quick facts

Base URL
https://moogleapi.com/api
Authentication
No key or account. Note that `www.moogleapi.com` redirects to the apex domain — call the apex directly to avoid a redirect on every request.
Rate limit
No rate-limit headers are returned. The dataset is static, so cache it locally rather than reading through on every page view.
Pricing
Free.
CORS
Not enabled — call it from your server
Official docs
Read the docs

How to use the moogleAPI

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. List Final Fantasy characters

GET https://moogleapi.com/api/characters?limit=1

curl
curl 'https://moogleapi.com/api/characters?limit=1'
JavaScript (fetch)
const res = await fetch("https://moogleapi.com/api/characters?limit=1");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://moogleapi.com/api/characters?limit=1", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "items": [
    {
      "id": 945,
      "name": "13th Order Fugleman Zo Ga",
      "role": "Fugleman",
      "affiliation": "13th Order",
      "race": "Kobold",
      "hometown": "U'Ghamaro Mines",
      "abilities": null,
      "imageUrl": "https://images.moogleapi.com/gen/characters/945.webp",
      "gameName": "Final Fantasy XIV",
      "releaseYear": 2013,
      "popularity": 67
    },
    {
      "id": 946,
      "name": "175th Order Alchemist Bi Bi",
      "role": "Alchemist",
      "affiliation": "175th Order",
      "race": "Kobold",
      "hometown": "789th Order Dig",
      "abilities": null,
      "imageUrl": "https://images.moogleapi.com/gen/characters/946.webp",
      "gameName": "Final Fantasy XIV",
      "releaseYear": 2013,
      "popularity": 36
    },
    {
      "id": 947,
      "name": "269th Order Mendicant Da Za",
      "role": null,
      "affiliation": null,
      "race": "Kobold",
      "hometown": null,
      "abilities": null,
      "imageUrl": "https://images.moogleapi.com/gen/characters/947.webp",
      "gameName": "Final Fantasy XIV",
      "releaseYear": 2013,
      "popularity": 72
    },
    {
      "id": 2540,
      "name": "2B",
      "role": "Battler (YoRHa Soldier Unit), Executioner",
      "affiliation": "YoRHa",
      "race": "Android",
      "hometown": null,
      "abilities": null,
      "imageUrl": "https://images.moogleapi.com/gen/characters/2540.webp",
      "gameName": "Final Fantasy XIV",
      "releaseYear": 2013,
      "popularity": 81
    },
    {
      "id": 949,
      "name": "2P",
      "role": null,
      "affiliati

Parameters

ParameterTypeRequiredDescription
pagequeryOptionalPage number for collection endpoints. 1
limitqueryOptionalRequested page size. In our capture the response still contained several records, so treat it as a hint and trim client-side. 1
queryqueryOptionalSearch term for the `/characters/search` and `/monsters/search` paths. Cloud
idpath segmentOptionalAppend an id to a collection to fetch one record. 2540

Response fields

itemsarray
The page of records. Collections are always wrapped in `items`.
items[].idinteger
Stable numeric id. Ids are not contiguous within a page — they follow insertion order, not display order.
items[].namestring
Character name. Default ordering is a string sort on this field, so numeric-leading names come first.
items[].role / affiliation / hometown / abilitiesstring | null
Frequently null on minor characters. Null-check every one before rendering a detail card.
items[].racestring
Species or race — `Kobold`, `Android`, `Hume` and so on. More consistently populated than the other descriptors.
items[].gameNamestring
Which Final Fantasy title the character belongs to. This is the field that makes cross-game queries possible.
items[].releaseYearinteger
Release year of that game, denormalised onto every character so you can sort chronologically without a join.
items[].popularityinteger
A ranking score, useful as a default sort when you have no better ordering.
items[].imageUrlstring
Absolute WebP artwork URL on the project's image CDN.

What you can build with the moogleAPI

  • Build a Final Fantasy character browser spanning every game
  • Generate a franchise timeline from release years
  • Filter characters by race or affiliation across titles
  • Power a 'guess the game' quiz from character artwork
  • Seed a fan wiki with structured franchise data

Common errors and how to fix them

404 on /api/v1/...

The live routes have no version segment.

Fix: Call `/api/characters`, `/api/games`, `/api/monsters` — the `v1` shown in older documentation returns a bare 404.

A redirect on every request

You called `www.moogleapi.com`.

Fix: Use the apex `moogleapi.com` directly; the www host 301s to it.

More records than the limit you asked for

`limit` was not honoured in our capture.

Fix: Slice the `items` array client-side, and page with `page` rather than relying on page size.

A CORS failure in the browser

No `Access-Control-Allow-Origin` header is sent.

Fix: Call it from your server, or put a small proxy in front.

moogleAPI — frequently asked questions

Is there a free Final Fantasy API?

Yes — moogleAPI covers the whole franchise with characters, games and monsters, and needs no key or account. Each character carries the game it belongs to, so you can query across titles rather than one at a time.

What is the difference between moogleAPI and XIVAPI?

Breadth versus depth. moogleAPI spans every mainline Final Fantasy title with a light schema; XIVAPI exposes Final Fantasy XIV's complete internal data sheets. Use moogleAPI for franchise-wide views and XIVAPI when you need everything about one game.

Why are so many character fields null?

The dataset is far more complete for major characters than for background NPCs, and it returns null rather than inventing values. Null-check `role`, `affiliation`, `hometown` and `abilities` before rendering, and fall back to `race` and `gameName`, which are reliably present.

Can I call moogleAPI from browser JavaScript?

Not directly — it sends no CORS headers, so a browser fetch from another origin is blocked. Proxy it through your own backend, which is worth doing anyway since the data is static enough to cache.

Tools that pair with this API

moogleAPI is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.