PADherder API

Getting PAD monster data in a useful format is an annoying process. I've done the horrible part for you, so here is a simple API to access the PADherder monster data. Please cache the data locally if you intend to use this in your own app.

NOTE: all data is returned as JSON and uses escaped Unicode strings ('\u1234').

EndpointDescriptionExample
/api/active_skills/Active skills as an array of objects.

NOTE: these do NOT include a canonical GungHo skill ID due to the way the data is gathered.
[
  {
    "effect": "Attacks from Attacker type monsters are 1.5x stronger for 1 turn.",
    "max_cooldown": 12,
    "min_cooldown": 7,
    "name": "Alright, understood!"
  },
  ...
]
/api/awakenings/Awakenings as an array of objects.
[
  {
    "desc": "Increases HP by 100",
    "id": 1,
    "name": "Enhanced HP"
  },
  ...
]
/api/events/

Current and upcoming events (1 hour dungeons?) as an array of objects.

Notes:
  • The "country" field is { 1:JP, 2:US }. Other values are currently unused.
  • The "group_name" field is [ A, B, C, D, E ] for different ID groups or { 1:Fire, 2:Water, 3:Wood } for starter dungeons.
  • The "starts_at" field is an ISO 8601 combined date and time in UTC.
[
  {
    "country": 2,
    "group_name": "D",
    "starts_at": "2014-01-08T07:00:00Z",
    "title": "Dungeon of Emerald Dragons"
  },
  ...
]
/api/evolutions/

Evolutions as an object mapping a monsterID to an array of evolution objects.

Notes:
  • Monsters with multiple possible evolutions will have multiple entries in the array.
  • The "materials" field is an array of [monsterID, count] arrays sorted in box order (element ascending, rarity descending).
{
  "516": [
    {
      "evolves_to": 894,
      "is_ultimate": true,
      "materials": [[247, 1], [321, 1], [251, 1], [175, 1], [151, 1]]
    },
    {
      "evolves_to": 895,
      "is_ultimate": true,
      "materials": [[247, 1], [916, 1], [321, 1], [251, 1], [151, 1]]
    }
  ],
  ...
}
/api/food/

Food data as an object.

Notes:
  • The "food" key is an object mapping a foodID (a monsterID really) to an array of monsterIDs that can use the food for skillups.
  • The "monsters" key is an object mapping a monsterID to an arrow of foodIDs that the monster can use for skillups.
{
  "food": {
    "2": [3, 4, 113, 322, 323, 324, 325, 480, 1109],
    "6": [7, 8, 115, 326, 327, 328, 329, 481, 1095],
    ...
  },
  "monsters": {
    "3": [2, 112, 262],
    "4": [2, 112, 262],
    ...
  },
}
/api/leader_skills/

Leader skills as an array of objects.

Optional fields:
  • The "data" field contains the data PADherder users to calculate multipliers for leader skills. The format is [HP multiplier, AKT multiplier, RCV multiplier, constraint1, ..., constraintN]. Constraints consist of an attribute specifier ( "elem" for monster element, "type" for monster type) and 1 or more value checks. The example here is '[1, 2, 1, ["type", 2]]' which translates to 1x HP/2x ATK/1x RCV for monsters with type 2 (Physical).
NOTE: these do NOT include a canonical GungHo skill ID due to the way the data is gathered.
[
  {
    "data": [1, 2, 1, ["type", 2]],
    "effect": "2x ATK and RCV for Physical type monsters.",
    "name": "Aero Stream"
  },
  ...
]
/api/materials/

Material data as an object.

Notes:
  • The "counts" field is an object mapping monsterID to the number of evolutions it is used in. PADherder considers ≥10 to be a 'common' material and <10 to be 'rare'.
  • The "days" field is an object mapping days of the week (1=Monday) to monsterIDs of materials available from daily dungeons on that day.
{
  "counts": {
    "257": 3,
    "258": 2,
    "260": 4,
    ...
  },
  "days": {
    "2": [147, 148, 149, 1176, 150, 321, 151],
    ...
  }
}
/api/monsters/

Monster data as an array of objects.

Optional fields:
  • The "pdx_id" field only appears when PDX and the Wiki disagree on the ID to use for monsters (BAO collab).
  • The "us_id" field only appears when the US version of the game has monsters with different IDs than the JP version (BAO collab again).
Notes:
  • The "element" and "element2" fields are { 0:Fire, 1:Water, 2:Wood, 3:Light, 4:Dark }.
  • The "type" and "type2" fields are { 0:Evo Material, 1:Balanced, 2:Physical, 3:Healer, 4:Dragon, 5:God, 6:Attacker, 7:Devil, 12:Awoken Skill Material, 13:Protected, 14:Enhance Material }.
Useful links:
[
  {
    "active_skill": "Heat Breath",
    "atk_max": 71,
    "atk_min": 57,
    "atk_scale": 1.0,
    "awoken_skills": [],
    "element": 0,
    "element2": null,
    "feed_xp": 100.0,
    "hp_max": 144,
    "hp_min": 52,
    "hp_scale": 1.0,
    "id": 1,
    "jp_only": False,
    "leader_skill": "Fire Power",
    "max_level": 5,
    "name": "Tyrra",
    "rarity": 2,
    "rcv_max": 13,
    "rcv_min": 8,
    "rcv_scale": 1.0,
    "team_cost": 2,
    "type": 4,
    "type2": null,
    "xp_curve": 1500000
  },
  ...
]

This API provides read/write access to material and monster data. Authenticate using your PADherder username and password.

Access controls:
  • Full access: user is authenticated AND user is the owner of this item.
  • Read access: read only method (GET, OPTIONS, HEAD) AND object is owned by user with 'Public' setting enabled.
  • No access: anything else.

The PUT method is used to replace an entire object while the PATCH method is used to update only some fields.

For an example of using this API see my padherder-sync project.

EndpointMethodDescriptionExample

User

/user-api/user/[username]/GETRetrieve all data for user [username].
{
  "profile": {
    # see /user-api/profile/[id]/
  },
  "food": [
    {
      # see /user-api/food/[id]/
    },
    ...
  ],
  "materials": [
    {
      # see /user-api/material/[id]/
    },
    ...
  ],
  "monsters": [
    {
      # see /user-api/monster/[id]/
    },
    ...
  ],
  "teams": [
    {
      # see /user-api/team/[id]/
    },
    ...
  ],
}

Profile

/user-api/profile/[id]/GETRetrieve profile identified by [id].
"profile": {
  "id": 1,
  "url": "https://www.padherder.com/user-api/profile/1/",
  "public": false,
  "display_name": "Fred SA",
  "profile_text": "Lorem ipsum dolor sit amet",
  "account_id": 0,
  "country": 2,
  "rank": 277,
  "starter_colour": 3,
  "team_group_1": "Team Group 1",
  "team_group_2": "Team Group 2",
  "team_group_3": "Team Group 3",
  "team_group_4": "Team Group 4",
  "team_group_5": "Team Group 5"
},
/user-api/profile/[id]/PUT
PATCH

Modify a profile. Returns a profile object as in 'GET' above.

Writable fields:
  • The "public" field sets the public status of this user. It expects 'true' or 'false'.
  • The "display_name" field sets the public display name of this user. It expects a string.
  • The "profile_text" field sets the public profile text of this user. It expects a string.
  • The "account_id" field sets the PAD Account ID of this user. It expects an integer between 0 and 999999999 inclusive.
  • The "country" field sets the PAD Account Country of this user. It expects an integer between 1 and 4 inclusive, correspeonding to { 1: Japan, 2: North American, 3: South Korea, 4: Europe }.
  • The "rank" field sets the PAD Account Rank of this user. It expects an integer between 1 and 999 inclusive.
  • The "starter_colour" field sets the starter colour of this user. It expects an integer between 1 and 3 inclusive, corresponding to { 1: Red, 2: Blue, 3: Green }.
  • The "team_group_N" fields set the titles used for team groups on the My Teams page. They expect a string.
PATCH /user-api/profile/1/
{
  "display_name": "Fred SAaaaaa",
  "rank": 278,
}

Food

/user-api/food/[id]/GETRetrieve food identified by [id].
{
  "id": 1,
  "url": "https://www.padherder.com/user-api/food/1/",
  "monster": 307,
  "count": 0
}
/user-api/food/[id]/PUT
PATCH

Modify a food. Returns a food object as in 'GET' above.

Writable fields:
  • The "count" field sets how many of this food the user has. It expects an integer between 0 and 999 inclusive.
PATCH /user-api/food/1/
{
  "count": 1,
}

Materials

/user-api/material/[id]/GETRetrieve material identified by [id].
{
  "id": 1,
  "url": "https://www.padherder.com/user-api/material/1/",
  "monster": 147,
  "count": 0
}
/user-api/material/[id]/PUT
PATCH

Modify a material. Returns a material object as in 'GET' above.

Writable fields:
  • The "count" field sets how many of this material the user has. It expects an integer between 0 and 999 inclusive.
PATCH /user-api/material/1/
{
  "count": 1,
}

Monsters

/user-api/monster/[id]/GETRetrieve monster identified by [id].
{
  "id": 650,
  "url": "https://www.padherder.com/user-api/monster/650/",
  "current_awakening": 0,
  "current_skill": 1,
  "current_xp": 4406,
  "monster": 4,
  "note": "",
  "pad_id": 1,
  "plus_atk": 1,
  "plus_hp": 0,
  "plus_rcv": 0
  "priority": 1,
  "target_evolution": 9,
  "target_level": 99,
},
/user-api/monster/[id]/PUT
PATCH

Modify a monster. Returns a monster object as in 'GET' above.

Required fields:
  • The "monster" field is required even for PATCHing a single field due to an annoying quirk.
Writable fields:
  • The "current_awakening" field sets how many awakenings this monster has. It expects an integer between 0 and (monster max awakenings) inclusive.
  • The "current_skill" field sets the monster's current skill level. It expects an integer between 1 and (monster max skill) inclusive.
  • The "current_xp" field sets the monster's current XP level. It expects an integer between 0 and (monster max XP) inclusive.
  • The "monster" field sets the monster's ID. It expects a monster ID from the 'monsters' data API.
  • The "note" field sets the monster's note. It expects a string.
  • The "pad_id" field sets the monster's unique PAD identifier - this is the same as cuid in the PAD JSON data.
  • The "plus_atk" field sets the monster's +ATK count. It expects an integer between 0 and 99 inclusive.
  • The "plus_hp" field sets the monster's +HP count. It expects an integer between 0 and 99 inclusive.
  • The "plus_rcv" field sets the monster's +RCV count. It expects an integer between 0 and 99 inclusive.
  • The "priority" field sets the monster's priority. It expects an integer between 0 (Zero) and 3 (High) inclusive.
  • The "target_evolution" field sets the monster's target evolution. It expects one of:
    • 0 for no target evolution.
    • null for default target evolution. For a non-final-evolution monster this will be the first (by ID) final evolution, while for an ultimate evolved monster this will be the same as 0. Confusement.
    • A monster ID that is on this monster's evolution chain.
  • The "target_level" field sets the monster's target level. It expects a value between 1 and (monster max level).
PATCH /user-api/monster/650/
{
  "monster": 4,
  "plus_atk": 99,
  "plus_hp": 99,
  "plus_rcv": 99,
}
/user-api/monster/[id]/DELETEDelete a monster. Returns a 204 response ('NO CONTENT') on success.
DELETE /user-api/monster/650/
/user-api/monster/POST

Create a new monster. Returns a monster object as in 'GET' above.

Required and writable fields are the same as in 'PUT/PATCH' above.
POST /user-api/monster/
{
  "monster": 4,
  "plus_atk": 99,
  "plus_hp": 99,
  "plus_rcv": 99,
}

Teams

/user-api/team/[id]/GET

Retrieve team identified by [id].

Field notes:
  • The "leader", "sub1", "sub2", "sub3", and "sub4" fields are all references to a /user-api/monster/[id]/.
  • The "friend_leader" field is a reference to a monster from /api/monsters/.
  • The "order" field is the position on the team list.
  • The "team_group" field is which of the 5 team groups this team belongs to.
{
  "id": 1,
  "url": "https://www.padherder.com/user-api/team/1/",
  "description": "",
  "favourite": true,
  "friend_atk": 99,
  "friend_awakening": 4,
  "friend_leader": 995,
  "friend_hp": 99,
  "friend_level": 99,
  "friend_rcv": 99,
  "friend_skill": 1,
  "leader": 4632,
  "name": "Unnamed team",
  "order": 2,
  "sub1": null,
  "sub2": null,
  "sub3": null,
  "sub4": null,
  "team_group": 1,
},
/user-api/team/[id]/PUT
PATCH

Modify a team. Returns a team object as in 'GET' above.

Writable fields:
  • The "leader" field sets the team leader. This is a user monster ID retrieved via the User API, and MUST belong to the user.
  • The "subN" fields set the team monster in each position. This is a user monster ID retrieved via the User API, and MUST belong to the user. It can also be null to mark the spot as empty.
  • The "friend_leader" field sets the team friend leader. This is a monster ID retrieved via the normal API.
  • The "friend_level" field sets the level of the friend leader. It expects an integer between 1 and (friend leader max level) inclusive.
  • The "friend_skill" field sets the skill level of the friend leader. It expects an integer between 1 and (friend leader max skill) inclusive.
  • The "friend_awakening" field sets the awakening level of the friend leader. It expects an integer between 0 and (friend leader max awakenings) inclusive.
  • The "friend_hp", "friend_atk" and "friend_rcv" fields set the +egg values of the friend leader. They expect an integer between 0 and 99 inclusive.
  • The "description" field sets the team's description. It can be up to 5000 characters long. HTML tags are stripped.
  • The "favourite" field sets the team's favourite state. It expects 'true' or 'false'.
  • The "order" field sets the sort order of this team. FIXME: it doesn't actually work very well.
  • The "team_group" field sets the team group that this team belongs to. It expects an integer between 1 and 5 inclusive.
PATCH /user-api/team/1/
{
  "sub1": 1234,
  "friend_atk": 99,
  "friend_hp": 99,
  "friend_rcv": 99,
}
/user-api/team/[id]/DELETEDelete a team. Returns a 204 response ('NO CONTENT') on success.
DELETE /user-api/team/1/
/user-api/team/POST

Create a new team. Returns a team object as in 'GET' above.

Required fields:
  • The "leader" field is required.
  • The "friend_leader" field is required.
Writable fields are the same as in 'PUT/PATCH' above.
POST /user-api/team/
{
  "leader": 1,
  "friend_leader": 999,
}