uloggdDevelopers
Developer portaluloggd
Get startedResourcesArcade
Developer portaluloggdIdentityCatalogProfileLibraryReviewsJournalListsAwardsScreenshotsSocialAccountNotificationsCommentsLikesHistoryPeopleMineralsArcade

Catalog

Games, from the same catalog the site reads.

The only scope that touches nobody's data, and the one that works on a key holding nothing else. Only the filters on your own games, at the end of this page, also need library.read.

GET/api/v1/games/{slug}/activity

Visible game activity and session totals. Accepts activity filters. sessions and minutes count closed sessions; days counts the calendar days with a session in them, each day once, even with two sessions on it or sessions that overlap. A live session still open is in none of the three.

Scope profile.read · Counted against the read allowance

GET/api/v1/games/ratings

Community averages by game. Answers rating (the average, to show), rating_count and weighted_rating (the average pulled towards the site mean by how many voted, to rank by). ids: 1 to 200 comma-separated ids. Public.

Scope catalog.read · Counted against the read allowance

GET/api/v1/games/stats

What uloggd's community does with each game: distinct people with it in their library, playing, finished, wishlisted, favorited, reviewing, on journeys and logging sessions, plus uloggd popularity and trending. Recomputed every few minutes from this site's activity; no IGDB number takes part. ids: 1 to 200 comma-separated ids. Public.

Scope catalog.read · Counted against the read allowance

GET/api/v1/games

Search the catalog, with the same filters as the site's own search. Public: answers without a key or a session. Each game carries type, IGDB's game type (0 main game, 1 DLC, 2 expansion, 3 bundle, 4 standalone expansion, 8 remake, 9 remaster, 10 expanded edition, 11 port; the same ids the types filter takes), or null when the catalog does not say. The filters on your own games (played, library, unplayed, wishlist, hideIgnored) are the exception: they read the asking account's library, so they need a session or a key that also holds library.read, and the answer comes with Cache-Control: private, no-store.

Scope catalog.read · Counted against the catalog allowance

Query

FieldTypeNotes
qstringFree text, up to 80 characters.
platformsstringComma-separated IGDB platform ids, up to 24.
releasestringreleased or upcoming. Defaults to both.
periodstringlast-30-days, last-90-days, this-year or next-3-months, counted from today (UTC).
yearFromintegerFirst release year, 1950 to 2100.
yearTointegerLast release year, 1950 to 2100.
demostring1 for games with a demo playable on spawnd now.
steamstring1 for games IGDB links to a Steam page.
genresstringComma-separated IGDB genre ids, up to 24.
genresModestringWith genres: all requires every one; defaults to any.
themesstringComma-separated IGDB theme ids, up to 24.
themesModestringWith themes: all requires every one; defaults to any.
modesstringComma-separated IGDB game mode ids, up to 24.
perspectivesstringComma-separated IGDB player perspective ids, up to 24.
typesstringComma-separated IGDB game types (0 main game, 8 remake, 9 remaster...), up to 24. Browsing without a query defaults to 0, 8 and 9.
languagestringUp to 8 comma-separated languages (pt, pt-BR, en-US) in the interface, audio or subtitles. pt finds pt-BR and pt-PT. Only where IGDB says.
interfacestringUp to 8 comma-separated languages (pt, pt-BR, en-US) in the interface. pt finds pt-BR and pt-PT. Only where IGDB says.
audiostringUp to 8 comma-separated languages (pt, pt-BR, en-US) in the audio. pt finds pt-BR and pt-PT. Only where IGDB says.
subtitlesstringUp to 8 comma-separated languages (pt, pt-BR, en-US) in the subtitles. pt finds pt-BR and pt-PT. Only where IGDB says.
agestringBoard and rating: esrb, pegi, cero, usk, grac, class_ind, acb, a hyphen and the step (class_ind-12, pegi-16, esrb-t). Games rated by that board up to that step; only where IGDB says.
publishersstringComma-separated IGDB company ids, up to 24.
rolestringWith publishers: publisher or developer. Defaults to either.
enginesstringComma-separated engine names, up to 24.
franchisesstringComma-separated IGDB franchise ids, up to 24.
seriesstringComma-separated IGDB series (collection) ids, up to 24.
ratedstring1 for games rated on uloggd only.
reviewedstring1 for games with at least one review on uloggd.
anticipatedstring1 for unreleased games somebody is waiting for.
ratingintegerMinimum uloggd score, 0 to 100.
votesintegerMinimum number of uloggd ratings.
librariesintegerMinimum number of people with the game in their uloggd library, 1 to 1000000.
statusstringearly_access, beta or alpha, comma-separated: any of them, as IGDB says.
hideCancelledstring1 to leave out games IGDB lists as cancelled or rumored.
hoursMinintegerIGDB's estimated main-story hours, at least (1 to 500). Only where IGDB says.
hoursMaxintegerIGDB's estimated main-story hours, at most (1 to 500). Only where IGDB says.
obscurestring1 to include lesser-known games when browsing without a query.
playedstring1 for games you played only. Only with a session, or a key holding library.read: with neither the answer is 401 unauthorized, and a key without library.read gets 403 insufficient_scope.
librarystring1 for games in your library only. Only with a session, or a key holding library.read: with neither the answer is 401 unauthorized, and a key without library.read gets 403 insufficient_scope.
unplayedstring1 for leaving out the games you played. Only with a session, or a key holding library.read: with neither the answer is 401 unauthorized, and a key without library.read gets 403 insufficient_scope.
wishliststring1 for games on your wishlist only. Only with a session, or a key holding library.read: with neither the answer is 401 unauthorized, and a key without library.read gets 403 insufficient_scope.
hideIgnoredstring1 for leaving out the games you ignored. Only with a session, or a key holding library.read: with neither the answer is 401 unauthorized, and a key without library.read gets 403 insufficient_scope.
sortstringpopular, trending, rating, votes, newest, oldest, hype, name. trending follows uloggd's community trend, and votes how many uloggd ratings a game has. Defaults to popular.
pageinteger1 to 100. Defaults to 1.

Example response

{
  "data": [
    {
      "id": 14593,
      "slug": "hollow-knight",
      "name": "Hollow Knight",
      "release_year": 2017,
      "type": 0,
      "rating": 92,
      "genres": ["Platform", "Adventure"],
      "spawnd_available": false
    }
  ],
  "page": { "number": 1, "size": 24, "total_items": 812,
            "total_pages": 34, "has_more": true }
}
GET/api/v1/games/{slug}

One game by its slug, in the same shape as the search (type included).

Scope catalog.read · Counted against the catalog allowance

Filters on your own games

The search (GET /api/v1/games) can also filter by the asking account's games, with 1 on each:

  • played: only the games you played, the library's "Played" shelf (status COMPLETED);
  • library: only the games in your library, in any state;
  • unplayed: the catalog without the played ones;
  • wishlist: only the games on your wishlist;
  • hideIgnored: the catalog without the games you ignored.

They read the asking account's library, which is what library.read guards, so they need a session or a key holding library.read as well as catalog.read. With neither a key nor a session the answer is 401 unauthorized, not an empty list, which would look like a result. A key without library.read gets 403 insufficient_scope with scope: "library.read".

An answer that used one of these filters comes with Cache-Control: private, no-store: it is about one account, and nothing on the way should keep it. Every other search stays public as before.

Identity

What a key is and who it belongs to.

Profile

The owner's own profile.