Protocol v1 payload reference
Wire examples for connector and gateway debugging
This page is for connector diagnostics and protocol maintenance. A server owner does not need these payloads to connect or configure a server: connector code parses and serializes them before integration code or configured SQL runs.
Common delivery envelope
Every paid game change has a stable command id for replay handling, its parent order id, the normalized target, and one versioned grant object.
{
"commandId": "77e6a4f0-4f6b-4c85-9e37-1d2a55f0a001",
"orderId": "b1c9c6a2-8d33-4f1e-9b70-6c0d64f0a002",
"grantActionId": "5a3f2d10-91ab-4d4f-8c22-7e9b64f0a003",
"target": {
"normalizedAccountName": "robert",
"characterId": 268485666
},
"grant": {
"type": "l2.grant_item",
"schemaVersion": 1,
"itemId": 57,
"count": 1000
}
}enchantLevel is optional and defaults to 0. A bundle uses one order id and
one command id per grant line. Replay protection is keyed by command id.
Other grant objects
{ "type": "l2.grant_skill", "schemaVersion": 1, "skillId": 1204, "skillLevel": 1 }{ "type": "l2.character_rename", "schemaVersion": 1, "newName": "Ravenblade" }{ "type": "l2.gender_change", "schemaVersion": 1, "newSex": "female" }{ "type": "m2.grant_cash", "schemaVersion": 1, "amount": 5000 }{ "type": "m2.grant_mileage", "schemaVersion": 1, "amount": 250 }The outer envelope remains the same. Account-scoped grants omit the character target when the game operation does not use one.
Character and catalog rows
{
"characterId": 268437506,
"name": "Ravenblade",
"level": 40,
"classId": 88,
"race": "human",
"sex": "male",
"online": true,
"pvpKills": 3,
"pkKills": 0,
"clanName": null
}{ "itemId": 57, "name": "Adena", "type": "EtcItem", "grade": null, "stackable": true }{ "skillId": 1204, "name": "Wind Walk", "maxLevel": 1 }Character skills query
{ "normalizedAccountName": "robert", "characterId": 268485666 }{
"outcome": "OK",
"skills": [
{ "skillId": 3, "level": 9 },
{ "skillId": 1040, "level": 3 }
]
}Player-online event
{
"protocolVersion": 1,
"messageId": "7ef143bc-5810-4b10-9507-820e72b13ce1",
"gameServerId": "834a9e80-607b-46b4-8952-cb27d2a476c9",
"sentAt": "2026-07-30T12:00:00.000Z",
"type": "event.player_online",
"payload": {
"normalizedAccountName": "admin",
"characterId": 268473216
}
}Protocol v1 retains these shapes for compatibility. Public integration APIs use domain objects or profile rows instead of constructing this JSON.