Games & Comics — entry 070 of 75

Universalis

Verified Aug 2026

Universalis is a crowdsourced market board API for Final Fantasy XIV, aggregating item listings, prices, and sale history submitted by the game's own community-plugin ecosystem across every data center and world. It exposes a keyless REST API alongside a WebSocket feed for real-time listing updates, both free to use. The old `/docs/index.html` path now permanently redirects to a dedicated documentation site.

Universalis is a crowdsourced Final Fantasy XIV market board API, aggregating item listings and sale history submitted by the game's own community-plugin ecosystem. A live GET this run against /Chaos/5?listings=1&entries=1 (a world name plus an item ID as path segments, not query params) returned a genuine 2,230 B listing object at HTTP 200, content-type: application/json; charset=utf-8, access-control-allow-origin: *.

ffxivmmorpgmarket-boardeconomy
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSON, WebSocketResponses can be requested as JSON or WebSocket.

GreatAPIs Score

Score100out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs20/20Machine-readable spec file bundled
Formats15/15Supports 2 response formats
Freshness20/20Verified within 6 months

Embed this badge

Scored 100 on greatapis.com
<a href="https://greatapis.com/api/universalis/"><img src="https://greatapis.com/badge/universalis.svg" alt="Scored 100 on greatapis.com"></a>

Auth quickstart

  1. No API key, signup, or credit card required — the live GET above returned real, current listing data with no auth header of any kind attached.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Endpoints

Available data centers1
GET/api/v2/data-centersReturns all data centers supported by the API.
Responses
StatusDescriptionSchema
200Success
Available worlds1
GET/api/v2/worldsReturns the IDs and names of all worlds supported by the API.
Responses
StatusDescriptionSchema
200Success
Current item price1
GET/api/v2/aggregated/{worldDcRegion}/{itemIds}Retrieves aggregated market board data for the given items. Up to 100 item IDs can be comma-separated in order to retrieve data for multiple items at once. AverageSalePrice and DailySaleVelocity are calculated based on sales of the last 4 days. This API uses only cached values and is therefore strongly preferred over CurrentlyShown if individual sales/listings are not required.
Parameters
NameInRequiredType
itemIdspathyesstring
worldDcRegionpathyesstring
User-Agentheadernostring
CF-Connecting-IPheadernostring
Responses
StatusDescriptionSchema
200Data retrieved successfully.Universalis.Application.Views.V2.AggregatedMarketBoardData
400The parameters were invalid.Microsoft.AspNetCore.Mvc.ProblemDetails
404The world/DC or item requested is invalid. When requesting multiple items at once, an invalid item ID will not trigger this. Instead, the returned list of unresolved item IDs will contain the invalid item ID or IDs.Microsoft.AspNetCore.Mvc.ProblemDetails
Game entities1
GET/api/v2/extra/content/{contentId}Returns the content object associated with the provided content ID. Please note that this endpoint is largely untested, and may return inconsistent data at times.
Parameters
NameInRequiredType
contentIdpathyesstring
Responses
StatusDescriptionSchema
200SuccessUniversalis.Application.Views.V1.Extra.ContentView
Least-recently updated items1
GET/api/v2/extra/stats/least-recently-updatedGet the least-recently updated items on the specified world or data center, along with the upload times for each item.
Parameters
NameInRequiredType
worldquerynostring
dcNamequerynostring
entriesquerynostring
Responses
StatusDescriptionSchema
200SuccessUniversalis.Application.Views.V1.Extra.Stats.MostRecentlyUpdatedItemsView
404The world/DC requested is invalid.Microsoft.AspNetCore.Mvc.ProblemDetails
Market board current data1
GET/api/v2/{worldDcRegion}/{itemIds}Retrieves the data currently shown on the market board for the requested item and world or data center. Up to 100 item IDs can be comma-separated in order to retrieve data for multiple items at once.
Parameters
NameInRequiredType
itemIdspathyesstring
worldDcRegionpathyesstring
listingsquerynostring
entriesquerynostring
hqquerynostring
statsWithinquerynostring
entriesWithinquerynostring
fieldsquerynostring
User-Agentheadernostring
CF-Connecting-IPheadernostring
Responses
StatusDescriptionSchema
200Data retrieved successfully.Universalis.Application.Views.V2.CurrentlyShownMultiViewV2
400The parameters were invalid.
404The world/DC or item requested is invalid. When requesting multiple items at once, an invalid item ID will not trigger this. Instead, the returned list of unresolved item IDs will contain the invalid item ID or IDs.Microsoft.AspNetCore.Mvc.ProblemDetails
Market board sale history1
GET/api/v2/history/{worldDcRegion}/{itemIds}Retrieves the history data for the requested item and world or data center. Up to 100 item IDs can be comma-separated in order to retrieve data for multiple items at once.
Parameters
NameInRequiredType
itemIdspathyesstring
worldDcRegionpathyesstring
entriesToReturnquerynostring
statsWithinquerynostring
entriesWithinquerynostring
entriesUntilquerynostring
minSalePricequerynointeger
maxSalePricequerynointeger
User-Agentheadernostring
CF-Connecting-IPheadernostring
Responses
StatusDescriptionSchema
200Data retrieved successfully.Universalis.Application.Views.V2.HistoryMultiViewV2
404The world/DC or item requested is invalid. When requesting multiple items at once, an invalid item ID will not trigger this. Instead, the returned list of unresolved item IDs will contain the invalid item ID or IDs.Microsoft.AspNetCore.Mvc.ProblemDetails
Market tax rates1
GET/api/v2/tax-ratesRetrieves the current tax rate data for the specified world. This data is provided by the Retainer Vocate in each major city.
Parameters
NameInRequiredType
worldquerynostring
User-Agentheadernostring
Responses
StatusDescriptionSchema
200Data retrieved successfully.Universalis.Application.Views.V1.TaxRatesView
404The world requested is invalid.Microsoft.AspNetCore.Mvc.ProblemDetails
Marketable items1
GET/api/v2/marketableReturns the set of marketable item IDs.
Responses
StatusDescriptionSchema
200Success
Most-recently updated items1
GET/api/v2/extra/stats/most-recently-updatedGet the most-recently updated items on the specified world or data center, along with the upload times for each item.
Parameters
NameInRequiredType
worldquerynostring
dcNamequerynostring
entriesquerynostring
Responses
StatusDescriptionSchema
200SuccessUniversalis.Application.Views.V1.Extra.Stats.MostRecentlyUpdatedItemsView
404The world/DC requested is invalid.Microsoft.AspNetCore.Mvc.ProblemDetails
Recently updated items1
GET/api/v2/extra/stats/recently-updatedReturns a list of some of the most recently updated items on the website. This endpoint is a legacy endpoint and does not include any data on which worlds or data centers the updates happened on.
Responses
StatusDescriptionSchema
200SuccessUniversalis.Application.Views.V1.Extra.Stats.RecentlyUpdatedItemsView
Upload counts by upload application1
GET/api/v2/extra/stats/uploader-upload-countsReturns the total upload counts for each client application that uploads data to Universalis.
Responses
StatusDescriptionSchema
200Success
Upload counts by world1
GET/api/v2/extra/stats/world-upload-countsReturns the world upload counts and proportions of the total uploads for each world.
Responses
StatusDescriptionSchema
200Success
Uploads per day1
GET/api/v2/extra/stats/upload-historyReturns the number of uploads per day over the past 30 days.
Responses
StatusDescriptionSchema
200SuccessUniversalis.Application.Views.V1.Extra.Stats.UploadCountHistoryView
User lists1
GET/api/v2/lists/{listId}Retrieves a user list.
Parameters
NameInRequiredType
listIdpathyesstring
Responses
StatusDescriptionSchema
200Data retrieved successfully.Universalis.Application.Views.V2.UserListView
404The list requested does not exist.Microsoft.AspNetCore.Mvc.ProblemDetails

Try it

Developer reference

Base URLhttps://universalis.app
Key endpoints
  • GET/api/v2/{worldDcRegion}/{itemIds}
  • GET/api/v2/worlds
  • GET/api/v2/data-centers
  • GET/api/v2/marketable

Gotchas & limits

  • Errors are application/problem+json (RFC 9110), the only one of Games & Comics' quickstarted APIs to use it — a live GET this run against /nosuchthing returned HTTP 404 with content-type: application/problem+json; charset=utf-8 and a 162 B body: {"type":"https://tools.ietf.org/html/rfc9110#section-15.5.5","title":"Not Found","status":404,"traceId":"..."}. The traceId is unique per request — pin the stable type/title/status fields in tests, not the trace id.
  • Several endpoints return a bare JSON array at the top level, not an object envelope — live GETs this run against /worlds (3,690 B, e.g. [{"id":21,"name":"Ravana"},...]), /data-centers (1,389 B, e.g. [{"name":"Elemental","region":"Japan","worlds":[...]}...]), and /marketable (96,815 B, a bare array of 16,843 integer item IDs) all confirm this — code that assumes every response is {...} will fail to iterate these three.
  • A comma-separated item-ID list changes the top-level shape from a single object to a map — a live GET this run against /Chaos/5,6?listings=1&entries=1 (4,586 B) returned {itemIDs, items, dcName, unresolvedItems} with per-item data nested under items, not the flat single-item shape the plain /Chaos/5 request above returns. Branch on how many IDs you requested before parsing the response.
  • World/item/data-center identifiers are addressed as path segments, not query parameters — confirmed live above with /Chaos/5 (world-or-DC name, then item ID, both in the URL path). A real-time WebSocket feed at wss://universalis.app/api/ws exists alongside this REST API for listing updates, so a fully real-time integration isn't limited to polling.

Availability

Uptime100%
Median latency351.5 ms
Last checkUp · 200 · Sep 2026

4 checks since Aug 2026. A person runs this check by hand, not an automated monitor.

Changelog

Spec versionv2
Tracked paths15
  • Aug 2026gained an OpenAPI spec

Tracking since Sep 2026. See every tracked change ↗ ·Subscribe with RSS ↗