複数のゲームをまとめて同定
const url = 'https://game.retrogather.com/rest/v1/searchGamesBatch';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"rows":[{"query":"example","janCode":"example","modelNumber":"example","externalId":{"provider":"example","id":"example"},"platformIds":[1],"releaseDateFrom":"2026-04-15","releaseDateTo":"2026-04-15"}],"perRowLimit":1,"fields":["externalLinks"]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://game.retrogather.com/rest/v1/searchGamesBatch \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "rows": [ { "query": "example", "janCode": "example", "modelNumber": "example", "externalId": { "provider": "example", "id": "example" }, "platformIds": [ 1 ], "releaseDateFrom": "2026-04-15", "releaseDateTo": "2026-04-15" } ], "perRowLimit": 1, "fields": [ "externalLinks" ] }'Games / ゲーム一括同定: identify up to 20 games in one call, e.g. rows from a spreadsheet or list the user gave you. Each row needs one identifying term (query, janCode, modelNumber, or externalId) and may narrow with platformIds or release dates. Each row returns up to perRowLimit candidates (default 3, max 5) ordered like searchGames, with matchedBy / exact / edition. No paging: if a row is ambiguous or not found, ask the user or call searchGames for that row with more conditions. Show the resolved list to the user before adding games (addToLibraryBatch).
Plans: FREE / LIGHT / PREMIUM. Scopes: games:read.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
One row per game to identify. Results come back in the same order with the same index.
object
Title, reading, or abbreviation (same as searchGames query).
Partial match, hyphens and case ignored.
Exact external id. provider is one of igdb, asin, media (alias mediaArts), gps, catalog; other providers are not matched as an identifier.
object
YYYY-MM-DD, inclusive.
YYYY-MM-DD, inclusive.
Candidates per row. Default 3.
Optional game groups. Default [] (core fields only) to keep 20 rows small.
Responses
Section titled “ Responses ”Tool result JSON (no MCP envelope). Delete previews also return 200 with confirmToken.
object
object
object
object
object
object
object
object
object
JanCode / modelNumber / externalId / gameId: identifier. title / titleEn: official title. alias: hiragana reading or nickname, not the official title. Multi-term queries report the weakest field.
True when the whole query equals the matched value. For alias it means the query equals a reading or nickname, not the official title.
True when an edition’s JAN or model number matched; specs may differ from the query.
object
object
object
Example
{ "rows": [ { "items": [ { "matchedBy": "janCode" } ] } ]}Invalid_input (arguments, broken JSON body)
Entry errors (auth, routing, quota) use error; tool errors use code and message. Check retryable when present.
object
Examplegenerated
{ "error": "example", "code": "example", "message": "example", "retryable": true, "retryAfterSec": 1, "requestId": "example", "resetAt": "example", "remaining": 1, "scopes": [ "example" ], "upgradeUrl": "example"}Missing or invalid API key
Entry errors (auth, routing, quota) use error; tool errors use code and message. Check retryable when present.
object
Examplegenerated
{ "error": "example", "code": "example", "message": "example", "retryable": true, "retryAfterSec": 1, "requestId": "example", "resetAt": "example", "remaining": 1, "scopes": [ "example" ], "upgradeUrl": "example"}Insufficient_scope, plan_required, or access_suspended
Entry errors (auth, routing, quota) use error; tool errors use code and message. Check retryable when present.
object
Examplegenerated
{ "error": "example", "code": "example", "message": "example", "retryable": true, "retryAfterSec": 1, "requestId": "example", "resetAt": "example", "remaining": 1, "scopes": [ "example" ], "upgradeUrl": "example"}Target or tool not found
Entry errors (auth, routing, quota) use error; tool errors use code and message. Check retryable when present.
object
Examplegenerated
{ "error": "example", "code": "example", "message": "example", "retryable": true, "retryAfterSec": 1, "requestId": "example", "resetAt": "example", "remaining": 1, "scopes": [ "example" ], "upgradeUrl": "example"}Burst or daily quota exceeded. See resetAt.
Entry errors (auth, routing, quota) use error; tool errors use code and message. Check retryable when present.
object
Examplegenerated
{ "error": "example", "code": "example", "message": "example", "retryable": true, "retryAfterSec": 1, "requestId": "example", "resetAt": "example", "remaining": 1, "scopes": [ "example" ], "upgradeUrl": "example"}Headers
Section titled “Headers”Seconds
Unexpected server failure. Retrying the same call will not help.
Entry errors (auth, routing, quota) use error; tool errors use code and message. Check retryable when present.
object
Examplegenerated
{ "error": "example", "code": "example", "message": "example", "retryable": true, "retryAfterSec": 1, "requestId": "example", "resetAt": "example", "remaining": 1, "scopes": [ "example" ], "upgradeUrl": "example"}Temporary failure or maintenance. Retry after Retry-After.
Entry errors (auth, routing, quota) use error; tool errors use code and message. Check retryable when present.
object
Examplegenerated
{ "error": "example", "code": "example", "message": "example", "retryable": true, "retryAfterSec": 1, "requestId": "example", "resetAt": "example", "remaining": 1, "scopes": [ "example" ], "upgradeUrl": "example"}Headers
Section titled “Headers”Seconds
