Docs

Open API

Look up the resources of games by their Shionlib, Hikarinagi, Bangumi or VNDB IDs with an API key.

ringyuki
ringyuki

October 14, 2026

Getting an API key

  1. Open Settings → API keys (or go to /user/settings/api-keys)
  2. Click Create an API key and give it a name
  3. Copy the key shown. It cannot be shown again once the dialog is closed; if you lose it, delete it and create a new one

An account can have up to 10 API keys. API keys only work for the open API; they cannot sign in or call the other endpoints of the site.The list in Settings shows the first characters of each API key, the day it was created and when it was last used.

Keep API keys on a server or on your own devices. Do not put them in public web pages or repositories.

Sending a request

Put the API key in the Authorization header as a Bearer token:

curl -H "Authorization: Bearer $SHIONLIB_API_KEY" \
  "https://shionlib.com/api/open/v1/games?vid=v1141"
bash

The API accepts requests from any origin and does not read cookies.

Query parameters

Give one of four kinds of ID:

ParameterIDExample
idShionlib game ID1947
hidHikarinagi ID2303
bidBangumi subject ID7868
vidVNDB ID; the leading v may be left outv1141
  • Up to 50 IDs can be looked up at once, separated by commas, such as bid=7868,15004
  • One ID can belong to several games, such as an original and its remake sharing a VNDB ID; all of them are returned
  • Only public games and published resources are returned, with the files that can be downloaded; adult games are returned too and marked by nsfw

Response

{
  "code": 0,
  "message": "",
  "data": {
    "games": [
      {
        "id": 1947,
        "hid": 2303,
        "bid": "7868",
        "vid": "v1141",
        "title_jp": "俺たちに翼はない",
        "title_zh": "我们没有翅膀",
        "title_en": "",
        "nsfw": false,
        "url": "https://shionlib.com/game/1947",
        "resources": [
          {
            "id": 3443,
            "url": "https://shionlib.com/resource/3443",
            "platform": ["win"],
            "language": ["zh"],
            "translation": "group",
            "translators": [{ "id": 447, "name": "新米日文游戏中文化技术交流小组" }],
            "patch_version": null,
            "release_url": null,
            "edition": null,
            "edition_name": null,
            "form": "portable",
            "extras": [],
            "downloads": 237,
            "creator": { "id": 1, "name": "ringyuki" },
            "published_at": "2026-01-04T16:36:08.028Z",
            "updated": "2026-03-21T06:21:10.994Z",
            "files": [
              {
                "id": 3434,
                "file_name": "[Navel] 俺たちに翼はない.7z",
                "file_size": 2468559932,
                "hash_algorithm": "blake3",
                "file_hash": "11985d4448c7fd28…",
                "sha256": null
              }
            ]
          }
        ]
      }
    ],
    "missing": []
  },
  "requestId": "0f6c2a8e-6c1f-4f3e-9d0a-2b7d1c9e5a41",
  "timestamp": "2026-10-14T03:12:45.120Z"
}
json

data.games follows the order of the IDs asked for, and several games of one ID are ordered by their ID; data.missing lists the IDs that match no game, as they were written. Page addresses carry no language and lead to the language the visitor chose.

Game

FieldTypeDescription
idintegerShionlib game ID
hidinteger or nullHikarinagi ID
bidstring or nullBangumi subject ID
vidstring or nullVNDB ID
title_jp title_zh title_enstringJapanese, Chinese and English titles; empty when there is none
nsfwbooleanWhether the game is adult content
urlstringThe page of the game
resourcesarrayPublished resources, the most recently updated first; may be empty

Resource

FieldDescription
idResource ID
urlThe page of the resource, where it is downloaded
platformPlatforms: win mac lin and ios ps3 ps4 psv psp swi dvd
languageLanguages: jp zh zh-hant en
translationTranslation: none, official, group (a translation group) or machine; null when not given
translatorsTranslation groups with their id and name, in the order credited
patch_versionVersion of the patch
release_urlThe page the translation was released on
editionEdition: download, package or steam
edition_nameName of the edition
formForm: disc (disc image), installer or portable
extrasExtras: save (complete save) and bonus
noteThe note, as a rich text document: paragraphs (paragraph) of text (text) and line breaks (hard_break); text may carry the marks bold (bold), link (link, the address in attrs.href) and spoiler (spoiler); left out when there is no note
downloadsNumber of downloads
creatorUploader, with id and name
published_at updatedWhen it was published and last updated
filesFiles that can be downloaded, the volumes of a set together and in their order

File

FieldDescription
idFile ID
file_nameFile name
file_sizeSize in bytes
hash_algorithm file_hashThe hash taken at upload and its algorithm (blake3 or sha256)
sha256SHA-256 taken while the file was checked; null until then

Errors

On an error code is a business code, message explains it in the language of Accept-Language, and data is null.

StatusMeaning
401No API key was given, or the key is not valid or was deleted
403The key was suspended by an administrator, or its account is banned
422Wrong parameters: no ID, several kinds of ID, more than 50, or a malformed ID
429Too many requests; wait the seconds given in Retry-After and try again
503The open API is paused

Rate limits

All API keys of an account share one request limit, 60 a minute by default. Every response carries these headers:

HeaderMeaning
X-RateLimit-LimitRequests allowed in a window
X-RateLimit-RemainingRequests left in the current window
X-RateLimit-ResetSeconds until the count starts again

OpenAPI document

The OpenAPI document of the open API is at https://shionlib.com/api/open/v1/openapi.json, which can be used to generate client code.

Edit this page on GitHub