Skip to content

Gacha rates ​

Scope: moenotes:gacha

Published rates of a gacha pool and its pickup cards.

Endpoints ​

Full paths; supply only the parameters listed for the chosen endpoint.

/gacha/rates ​

http
GET /api/open/v1/moenotes/{region}/gacha/rates
ParameterLocationRequired
gachaIdqueryRequired
productIdqueryOptional
selectedPickUpqueryOptional

/gacha/{gachaId}/rates ​

http
GET /api/open/v1/moenotes/{region}/gacha/{gachaId}/rates
ParameterLocationRequired
gachaIdpathRequired
productIdqueryOptional
selectedPickUpqueryOptional

/gacha/{gachaId}/rates/{selectedPickUp} ​

http
GET /api/open/v1/moenotes/{region}/gacha/{gachaId}/rates/{selectedPickUp}
ParameterLocationRequired
gachaIdpathRequired
productIdqueryOptional
selectedPickUppathRequired

Parameters ​

ParameterDescription
gachaIdTarget gacha pool ID. There is no implicit default pool.
selectedPickUpPickup index. Optional in query form; required in the path form.
productIdOptional product ID to narrow the pool's rate table.

Region differences ​

Gacha pools are region-specific and their schedules differ, so a gachaId must come from the same region you query. Rates and pickup sets also differ between regions.

Notes ​

Always send gachaId; the API never falls back to the currently promoted pool.

Returns 400 invalid_request for missing required parameters or unknown inputs, 401 invalid_api_key for invalid credentials, 403 insufficient_scope when the key lacks moenotes:gacha, and 404 not_found when the specified gacha pool does not exist.

Example ​

sh
REGION=jp
curl --fail-with-body "https://passport.bdon.moe/api/open/v1/moenotes/$REGION/gacha/rates?gachaId=$GACHA_ID" \
  -H "Authorization: Bearer $CLIENT_SECRET"