API Documentation
Access Ragnarok Online game data programmatically from divine-pride.net.
Base URL
https://www.divine-pride.net/api
Authentication
All API requests require an API key passed as a query parameter. You can get your personal key from your profile page after signing in.
| Parameter | Location | Required | Description |
|---|---|---|---|
apiKey |
Query string | Yes | Your personal API key |
Example
GET /api/database/Monster/1002?apiKey=YOUR_API_KEY
Headers
Use HTTP headers to select the Ragnarok Online region whose data you want to query, and the language for localized content.
| Header | Required | Default | Description |
|---|---|---|---|
Accept-Language |
No | en |
Language for localized data. Values: en, ko, ja, pt, ru, fr, de, es, th, cn |
x-server |
No | kROM |
Ragnarok Online region to query — this selects the RO game server whose data you want, not a divine-pride.net server. Each region has its own game data. Value must be the server's real alias (not its display name): bRO, cRO, dpRO, idRO, GGH, GZero, iRO, jRO, kROM, kROZ, LATAM, ropEU, ropRU, thROC, thRO, twRO, twROZ |
Example
curl -H "Accept-Language: ko" \
-H "x-server: kROM" \
"https://www.divine-pride.net/api/database/Monster/1002?apiKey=YOUR_API_KEY"
Usage Guidelines
This API is provided for personal tools, bots, and integrations that need occasional lookups — please use it responsibly:
- Cache responses. Item/monster/skill/status-effect data rarely changes — don't re-fetch the same id on every use. Store what you look up and reuse it.
- Watch your rate limit. Exceeding it returns
429— back off and retry after theRetry-Afterheader, don't hammer it in a tight loop. - Don't try to mirror the whole database. There's no general search/browse endpoint — this API is for looking up entities you already know the id for, plus polling LatestUpdates for what changed. It isn't meant to let a third party stand up a competing copy of this site's database.
- Repeated abuse (ignoring rate limits, scripted bulk id enumeration, etc.) will get a key revoked.
/api/database/Monster/{id}
Retrieve detailed information for a single monster by its ID.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
id |
Path | integer | Monster ID |
apiKey |
Query | string | Your API key |
Example Request
GET /api/database/Monster/1002?apiKey=YOUR_API_KEY Accept-Language: en
Example Response
{
"id": 1002,
"name": "Poring",
"spriteName": "PORING",
"level": 1,
"race": "Plant",
"element": "Water",
"elementLevel": 1,
"size": "Medium",
"type": "Normal",
"health": 50,
"attackRange": "7~10",
"def": 0,
"mDef": 5,
"hit": 0,
"flee": 0,
"drops": [ ... ],
"mvpDrops": [ ... ],
"spawns": [ ... ],
"skills": [ ... ],
"dataUpdatedAtUtc": "2026-05-14T16:21:13Z",
"region": "kROM"
}
/api/database/Item/{id}
Retrieve detailed information for a single item by its ID.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
id |
Path | integer | Item ID |
apiKey |
Query | string | Your API key |
Example Request
GET /api/database/Item/501?apiKey=YOUR_API_KEY Accept-Language: en x-server: iRO
Example Response
{
"id": 501,
"name": "Red Potion",
"aegisName": "Red_Potion",
"iconUrl": "https://static.divine-pride.net/images/items/item/501.png",
"type": "Healing",
"subType": "",
"description": "A potion made from red herbs.",
"sellPrice": 25,
"buyPrice": 50,
"weight": 70,
"canDrop": true,
"canTrade": true,
"canStore": true,
"canCart": true,
"canSellToNpc": true,
"canMail": true,
"canAuction": true,
"canGuildStorage": true,
"itemMoveInfo": {
"drop": true,
"trade": true,
"store": true,
"cart": true,
"sell": true,
"mail": true,
"auction": true,
"guildStore": true
},
"allJobsAllowed": true,
"allowedJobIds": [ ... ],
"sources": [ ... ],
"scripts": [ ... ],
"dataUpdatedAtUtc": "2026-05-14T16:21:13Z",
"region": "iRO"
}
canDrop/canTrade/etc. and itemMoveInfo carry the same 8 trade-permission flags in two shapes — the flat fields plus a nested object matching the legacy public API's itemMoveInfo contract, kept for backward compatibility. accessorySprite/robeSprite (headgear/garment view-sprite resource names, omitted above) are only ever populated for the item type they actually apply to — null otherwise, even if the item's own classNum happens to coincidentally match an unrelated row in the other table.
/api/database/Skill/{id}
Retrieve detailed information for a single skill by its ID.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
id |
Path | integer | Skill ID |
apiKey |
Query | string | Your API key |
Example Request
GET /api/database/Skill/28?apiKey=YOUR_API_KEY Accept-Language: en
Example Response
{
"id": 28,
"name": "Heal",
"databaseName": "AL_HEAL",
"iconUrl": "https://static.divine-pride.net/images/skills/al_heal.png",
"description": "Restore a target's HP. Undead-property targets receive damage.",
"skillType": "Supportive",
"targetType": "Self/Ally",
"maxLevel": 10,
"spCost": "...",
"castTime": "...",
"cooldown": "...",
"range": "9",
"levelTable": [ ... ],
"prerequisites": [ ... ],
"dataUpdatedAtUtc": "2026-05-14T16:21:13Z",
"region": "kROM"
}
/api/database/Efst/{id}
Retrieve detailed information for a single status effect (buff/debuff) by its ID.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
id |
Path | integer | Efst (status effect) ID |
apiKey |
Query | string | Your API key |
Example Request
GET /api/database/Efst/1?apiKey=YOUR_API_KEY Accept-Language: en
Example Response
{
"id": 1,
"key": "EFST_BLESSING",
"name": "Blessing",
"description": "Increases STR, INT, and DEX.",
"iconUrl": "https://static.divine-pride.net/images/efst/1.png"
}
/api/database/latestupdates
Bare ids for one entity type that changed on the requested server, with their last-updated timestamp — for incremental sync.
Fetch full details for the ids you care about via the Monster/Item/Skill/Efst endpoints above.
Want more than one type? Call this once per type — results is always a flat list of just the one type you asked for, not a mixed bag that would need per-row type tagging to make sense of.
The window is always capped at 14 days from startDate, regardless of how far in the past it is — this is not a general "give me everything since X" endpoint. To cover a longer span, page through it one 14-day window at a time.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
apiKey |
Query | string | Your API key |
type |
Query | string | Required. One entity type: monster, item, efst, or skill. Missing or any other value returns 400. |
startDate |
Query | date | Start of the 14-day window (UTC, e.g. 2026-08-01). Optional — defaults to 14 days ago. |
Example Request
GET /api/database/latestupdates?type=item&startDate=2026-08-01&apiKey=YOUR_API_KEY x-server: kROM
Example Response
{
"region": "kROM",
"type": "item",
"startDate": "2026-08-01T00:00:00Z",
"endDate": "2026-08-15T00:00:00Z",
"results": [
{ "id": 501, "lastUpdate": "2026-08-01T09:12:04Z" },
{ "id": 4212, "lastUpdate": "2026-08-02T03:41:19Z" },
...
]
}
Rate Limits
| Tier | Requests / minute | Notes |
|---|---|---|
| Per API key | Varies | Set per account when your key is issued; contact support to raise your limit |
Exceeding the limit returns HTTP 429. Retry after the Retry-After header value (seconds).
Error Codes
| HTTP Status | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad request — missing or invalid parameter |
| 401 | Unauthorized — invalid or missing API key |
| 404 | Entity not found |
| 429 | Rate limit exceeded |
| 500 | Internal server error |