Skip to content

Southbound API

Our Southbound API allows you to automate the purchase of in-game items.

TIP

All Southbound API endpoints require authentication. Refer to the Authentication guide for details.

TIP

To sign your API requests with a secret key, follow the instructions in the Signing Requests guide.

Endpoints

Login

POST /api/southbound/login

Authenticate using email and password. Returns a token for subsequent requests.

Body Parameters
ParameterTypeRequiredDescription
emailstringyesemail
passwordstringyesPassword
json
{
  "email": "user@example.net",
  "password": "password"
}
Response Fields
FieldTypeDescription
tokenstringAuthentication token
secret_keystringSecret key
json
{
  "status": "success",
  "code": 200,
  "error": null,
  "data": {
    "token": "193|zlVt7FvH4ztrzSl41lzTCatF1hUDnzSkPhmKcGBla5842e91",
    "secret_key": "Ld3ADYhSkpt3p7S5n7MejEP2nyz4rRjT"
  }
}
json
{
  "status": "error",
  "code": 401,
  "error": {
    "code": "INVALID_CREDENTIALS",
    "message": "Invalid credentials"
  },
  "data": null
}
json
{
  "status": "error",
  "code": 422,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "The email field is required. (and 1 more error)",
    "errors": {
      "email": "The email field is required.",
      "password": "The password field is required."
    }
  },
  "data": null
}

List Games Requires authentication

GET /api/southbound/games

Retrieve a list of all available games.

Headers
HeaderTypeRequiredDescription
AuthorizationstringyesBearer token
X-SignaturestringyesSignature
Response Fields
FieldTypeDescription
dataarrayList of Game Object
linksarrayPagination links
metaarrayPagination metadata
json
{
  "status": "success",
  "code": 200,
  "error": null,
  "data": [
    {
      "type": "game",
      "id": "4319f52b-1b97-439f-b2f3-b24ad70099ae",
      "slug": "ragnarok-origin-global",
      "name": "Ragnarok Origin Global"
    }
  ]
}
json
{
  "status": "error",
  "code": 500,
  "error": {
    "code": "LIST_ERROR",
    "message": "Failed to retrieve list of resources",
    "tracking": "e61d7830-ec2f-4c7e-91fc-4cc3bef19865"
  },
  "data": null
}

Show Game Info Requires authentication

GET /api/southbound/games/{uuid}

Retrieve details of a specific order.

Headers
HeaderTypeRequiredDescription
AuthorizationstringyesBearer token
X-SignaturestringyesSignature
URL Parameters
ParameterTypeRequiredDescription
uuidstringyesGame ID
Response Fields
FieldTypeDescription
dataobjectGame Object
json
{
  "status": "success",
  "code": 200,
  "error": null,
  "data": {
    "type": "game",
    "id": "4319f52b-1b97-439f-b2f3-b24ad70099ae",
    "slug": "ragnarok-origin-global",
    "name": "Ragnarok Origin Global"
  }
}
json
{
  "status": "error",
  "code": 404,
  "error": {
    "code": "RESOURCE_NOT_FOUND",
    "message": "Resource not found"
  },
  "data": null
}
json
{
  "status": "error",
  "code": 500,
  "error": {
    "code": "SHOW_ERROR",
    "message": "Failed to retrieve resource",
    "tracking": "01cf630e-7f9c-49a3-badd-238ea7da7a72"
  },
  "data": null
}

List Game Servers Requires authentication

GET /api/southbound/games/{uuid}/servers

Retrieve a list of all available games.

Headers
HeaderTypeRequiredDescription
AuthorizationstringyesBearer token
X-SignaturestringyesSignature
URL Parameters
ParameterTypeRequiredDescription
uuidstringyesGame ID
Response Fields
FieldTypeDescription
dataarrayList of Game Server
linksarrayPagination links
metaarrayPagination metadata
json
{
  "status": "success",
  "code": 200,
  "error": null,
  "data": [
    {
      "type": "game_server",
      "id": "246",
      "name": "Prontera"
    }
  ]
}
json
{
  "status": "error",
  "code": 404,
  "error": {
    "code": "RESOURCE_NOT_FOUND",
    "message": "Resource not found"
  },
  "data": null
}
json
{
  "status": "error",
  "code": 500,
  "error": {
    "code": "LIST_ERROR",
    "message": "Failed to retrieve list of resources",
    "tracking": "e61d7830-ec2f-4c7e-91fc-4cc3bef19865"
  },
  "data": null
}

List Game Items Requires authentication

GET /api/southbound/games/{uuid}/items

Retrieve a list of all available games.

Headers
HeaderTypeRequiredDescription
AuthorizationstringyesBearer token
X-SignaturestringyesSignature
URL Parameters
ParameterTypeRequiredDescription
uuidstringyesGame ID
Response Fields
FieldTypeDescription
dataarrayList of Game Item
linksarrayPagination links
metaarrayPagination metadata
json
{
  "status": "success",
  "code": 200,
  "error": null,
  "data": [
    {
      "type": "game_item",
      "id": 1,
      "name": "Nyan Berry * 40",
      "channels": [
        {
          "channel_name": "OOC",
          "channel_slug": "ooc",
          "currency": "OOC",
          "base_price": "5.00"
        }
      ]
    }
  ]
}
json
{
  "status": "error",
  "code": 404,
  "error": {
    "code": "RESOURCE_NOT_FOUND",
    "message": "Resource not found"
  },
  "data": null
}
json
{
  "status": "error",
  "code": 500,
  "error": {
    "code": "LIST_ERROR",
    "message": "Failed to retrieve list of resources",
    "tracking": "e61d7830-ec2f-4c7e-91fc-4cc3bef19865"
  },
  "data": null
}

List Game Characters Requires authentication

GET /api/southbound/games/{uuid}/characters

Retrieve a list of game characters.

Headers
HeaderTypeRequiredDescription
AuthorizationstringyesBearer token
X-SignaturestringyesSignature
URL Parameters
ParameterTypeRequiredDescription
uuidstringyesGame ID
Query Parameters
ParameterTypeRequiredDescription
account_idstringyesGame account ID
server_idstringyesGame server ID
Example: /api/southbound/games/{uuid}/characters?account_id=BCD123456&server_id=123
Response Fields
FieldTypeDescription
dataarrayList of Game Character
linksarrayPagination links
metaarrayPagination metadata
json
{
  "status": "success",
  "code": 200,
  "error": null,
  "data": [
    {
      "type": "game_character",
      "id": "1234",
      "name": "John Doe"
    }
  ]
}
json
{
  "status": "error",
  "code": 404,
  "error": {
    "code": "RESOURCE_NOT_FOUND",
    "message": "Resource not found"
  },
  "data": null
}
json
{
  "status": "error",
  "code": 500,
  "error": {
    "code": "LIST_ERROR",
    "message": "Failed to retrieve list of resources",
    "tracking": "e61d7830-ec2f-4c7e-91fc-4cc3bef19865"
  },
  "data": null
}

Create Order Requires authentication

POST /api/southbound/orders

Create a new order.

Headers
HeaderTypeRequiredDescription
AuthorizationstringyesBearer token
X-SignaturestringyesSignature
Body Parameters
ParameterTypeRequiredDescription
game_idstringyesGame UUID
server_idstringyesGame server ID
user_idstringyesGame account ID
character_idstringyesGame character ID
character_namestringyesGame character name
item_idstringyesGame item ID
voucherstringnoVoucher code
json
{
  "game_id": "6a216c80-67fc-4311-9fa4-1907c77902bc",
  "server_id": "123",
  "user_id": "BCD123456",
  "character_id": "13579",
  "character_name": "John Doe",
  "item_id": 12,
  "voucher": "VOUCHER456"
}
Response Fields
FieldTypeDescription
dataobjectOrder Object
json
{
  "status": "success",
  "code": 201,
  "error": null,
  "data": {
    "type": "order",
    "id": "01HXRPFZH66P5M21ET3PMJ9T62",
    "game": "Ragnarok Origin Global",
    "character_id": "13579",
    "character_name": "John Doe",
    "item": "Nyan Berry * 40",
    "status": "new",
    "total_price": "OOC 4.6",
    "transaction": {
      "type": "transaction",
      "id": "01HXRPFZH8XNETP75TYBC1M42J",
      "currency":"OOC",
      "amount": "4.60",
      "status": "new"
    }
  }
}
json
{
  "status": "error",
  "code": 422,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "The game id field must be a valid UUID.",
    "errors": {
      "game_id": "The game id field must be a valid UUID."
    }
  },
  "data": null
}
json
{
  "status": "error",
  "code": 400,
  "error": {
    "code": "PAYMENT_ERROR",
    "message": "Payment error"
  },
  "data": null
}

Get Order Requires authentication

GET /api/southbound/orders/{order_id}

Retrieve details of a specific order.

Headers
HeaderTypeRequiredDescription
AuthorizationstringyesBearer token
X-SignaturestringyesSignature
URL Parameters
ParameterTypeRequiredDescription
order_idstringyesOrder ID
Response Fields
FieldTypeDescription
orderobjectOrder Object
json
{
  "status": "success",
  "code": 200,
  "error": null,
  "data": {
    "type": "order",
    "id": "01HXRPFZH66P5M21ET3PMJ9T62",
    "game": "Ragnarok Origin Global",
    "character_id": "TDAF95XM",
    "character_name": "John Doe",
    "item": "Nyan Berry * 40",
    "status": "new",
    "total_price": "OOC 4.6",
    "transaction": {
      "type": "transaction",
      "id": "01HXRPFZH8XNETP75TYBC1M42J",
      "currency": "OOC",
      "amount": "4.60",
      "status": "new"
    }
  }
}
json
{
  "status": "error",
  "code": 404,
  "error": {
    "code": "RESOURCE_NOT_FOUND",
    "message": "Resource not found"
  },
  "data": null
}
json
{
  "status": "error",
  "code": 500,
  "error": {
    "code": "SHOW_ERROR",
    "message": "Failed to retrieve resource",
    "tracking": "01cf630e-7f9c-49a3-badd-238ea7da7a72"
  },
  "data": null
}

Confirm Order Requires authentication

POST /api/southbound/transactions/{transaction_id}

Confirm an order via transaction ID.

Headers
HeaderTypeRequiredDescription
AuthorizationstringyesBearer token
X-SignaturestringyesSignature
URL Parameters
ParameterTypeRequiredDescription
transaction_idstringyesTransaction ID
Response Fields
FieldTypeDescription
orderobjectOrder Object
json
{
  "status": "success",
  "code": 200,
  "error": null,
  "data": {
    "type": "order",
    "id": "01HXRPFZH66P5M21ET3PMJ9T62",
    "game": "Ragnarok Origin Global",
    "character_id": "TDAF95XM",
    "character_name": "John Doe",
    "item": "Nyan Berry * 40",
    "status": "completed",
    "total_price": "OOC 4.6",
    "transaction": {
      "type": "transaction",
      "id": "01HXRPFZH8XNETP75TYBC1M42J",
      "currency": "OOC",
      "amount": "4.60",
      "status": "paid",
      "paid_at": "2024-05-13 18:05:48"
    }
  }
}
json
{
  "status": "error",
  "code": 404,
  "error": {
    "code": "RESOURCE_NOT_FOUND",
    "message": "Resource not found"
  },
  "data": null
}
json
{
  "status": "error",
  "code": 500,
  "error": {
    "code": "PAYMENT_ERROR",
    "message": "Payment error",
    "tracking": "ae24e2a6-47ea-49b5-abd4-c83ca91aab03"
  },
  "data": null
}

Get Wallet Balance Requires authentication

GET /api/southbound/wallet/balance

Retrieve current wallet balance.

Headers
HeaderTypeRequiredDescription
AuthorizationstringyesBearer token
X-SignaturestringyesSignature
Response Fields
FieldTypeDescription
dataobjectWallet Balance
json
{
  "status": "success",
  "code": 200,
  "error": null,
  "data": {
    "type": "wallet_balance",
    "id": "2c89c94c-efdc-4faa-b21a-7b0074f7acd5",
    "currency": "OOC",
    "value_cents": 4500
  }
}
json
{
  "status": "error",
  "code": 404,
  "error": {
    "code": "RESOURCE_NOT_FOUND",
    "message": "Resource not found"
  },
  "data": null
}
json
{
  "status": "error",
  "code": 500,
  "error": {
    "code": "SHOW_ERROR",
    "message": "Failed to retrieve resource",
    "tracking": "01cf630e-7f9c-49a3-badd-238ea7da7a72"
  },
  "data": null
}

Get Payment Requires authentication

GET /api/southbound/payment/{ulid}

Retrieve details of a specific payment transaction.

Headers
HeaderTypeRequiredDescription
AuthorizationstringyesBearer token
X-SignaturestringyesSignature
Response Fields
FieldTypeDescription
dataobjectPayment Transaction
json
{
  "status": "success",
  "code": 200,
  "error": null,
  "data": {
    "type": "payment_transaction",
    "payment_transaction_id": "01JRFDBWZDE9XD17EZGRBPM5K5",
    "reference": "RO-7539449-17442992546349647",
    "game_name": "ragnarok-online-pc",
    "payment_channel": "OOC_TH",
    "amount_cents": 500000,
    "currency": "OOC",
    "title": "500 Cash",
    "description": "Number of cash obtained : 500 Cash",
    "item_code": "RO.500.ooc50",
    "status": "created"
  }
}
json
{
  "status": "error",
  "code": 404,
  "error": {
    "code": "RESOURCE_NOT_FOUND",
    "message": "Resource not found"
  },
  "data": null
}
json
{
  "status": "error",
  "code": 500,
  "error": {
    "code": "SHOW_ERROR",
    "message": "Failed to retrieve resource",
    "tracking": "01cf630e-7f9c-49a3-badd-238ea7da7a72"
  },
  "data": null
}

Confirm Payment Requires authentication

GET /api/southbound/payment/{ulid}/confirm

Confirm payment transaction via payment transaction ULID.

Headers
HeaderTypeRequiredDescription
AuthorizationstringyesBearer token
X-SignaturestringyesSignature
Response Fields
FieldTypeDescription
dataobjectPayment Transaction
json
{
  "status": "success",
  "code": 200,
  "error": null,
  "data": {
    "type": "payment_transaction",
    "payment_transaction_id": "01JRFDBWZDE9XD17EZGRBPM5K5",
    "reference": "RO-7539449-17442992546349647",
    "game_name": "ragnarok-online-pc",
    "payment_channel": "OOC_TH",
    "amount_cents": 500000,
    "currency": "OOC",
    "title": "500 Cash",
    "description": "Number of cash obtained : 500 Cash",
    "item_code": "RO.500.ooc50",
    "status": "paid"
  }
}
json
{
  "status": "error",
  "code": 404,
  "error": {
    "code": "RESOURCE_NOT_FOUND",
    "message": "Resource not found"
  },
  "data": null
}
json
{
  "status": "error",
  "code": 500,
  "error": {
    "code": "SHOW_ERROR",
    "message": "Failed to retrieve resource",
    "tracking": "01cf630e-7f9c-49a3-badd-238ea7da7a72"
  },
  "data": null
}

Response Objects

Game Object

FieldTypeDescription
typestringObject type
game_idstringOrder ID
slugstringGame slug
namestringGame name

Example object:

json
{
  "type": "game",
  "game_id": "4319f52b-1b97-439f-b2f3-b24ad70099ae",
  "slug": "ragnarok-origin-global",
  "name": "Ragnarok Origin Global"
}

Game Server

FieldTypeDescription
typestringObject type
idstringServer ID
namestringServer name

Example object:

json
{
  "type": "game_server",
  "id": "246",
  "name": "Prontera"
}

Game Item

FieldTypeDescription
typestringObject type
idstringItem ID
namestringItem name
channelsarrayList of Game Item Channel

Example object:

json
{
  "type": "game_item",
  "id": 1,
  "name": "Nyan Berry * 40",
  "channels": [
    {
      "channel_name": "OOC",
      "channel_slug": "ooc",
      "currency": "OOC",
      "base_price": "5.00"
    }
  ]
}

Game Item Channel

FieldTypeDescription
channel_namestringChannel name
channel_slugstringChannel slug
currencystringCurrency
base_pricestringBase price

Example object:

json
{
  "channel_name": "OOC",
  "channel_slug": "ooc",
  "currency": "OOC",
  "base_price": "5.00"
}

Game Character

FieldTypeDescription
typestringObject type
idstringCharacter ID
namestringCharacter name

Example object:

json
{
  "type": "game_character",
  "id": "2468",
  "name": "John Doe"
}

Order Object

FieldTypeDescription
typestringObject type
idstringOrder ID
gamestringGame name
character_idstringGame character ID
character_namestringGame character name
itemstringItem name
statusstringOrder status
total_pricestringTotal price
transactionobjectTransaction object
json
{
  "type": "order",
  "id": "01HXGW60DRASC3EBSP8BE4T42Y",
  "game": "Ragnarok Origin Global",
  "character_id": "2468",
  "character_name": "Joh",
  "item": "Nyan Berry * 40",
  "status": "new",
  "total_price": "OOC 4.6",
  "transaction": {
    "type": "transaction",
    "id": "01HXGW60DV97K33QDG44BF8KWM",
    "currency": "OOC",
    "amount": "4.60",
    "status": "new"
  }
}

Transaction Object

FieldTypeDescription
typestringObject type
idstringTransaction ID
currencystringTransaction currency
amountstringTransaction amount
statusstringTransaction status
paid_atstringPayment date

Example object:

json
{
  "type": "transaction",
  "id": "01HXGW60DV97K33QDG44BF8KWM",
  "currency": "OOC",
  "amount": "5.00"
  "status": "new"
}

Wallet Balance

FieldTypeDescription
typestringObject type
idstringWallet ID
currencystringCurrency
value_centsintegerBalance amount in cents
json
{
  "status": "success",
  "code": 200,
  "error": null,
  "data": {
    "type": "wallet_balance",
    "id": "2c89c94c-efdc-4faa-b21a-7b0074f7acd5",
    "currency": "OOC",
    "value_cents": 4500
  }
}

Payment Transaction

FieldTypeDescription
typestringObject type
payment_transaction_idstringPyament Transaction ID
referencestringMerchant Transaction ID
game_namestringGame Name
payment_channelstringPayment Channel
amount_centsintegerAmount
currencystringCurrency
titlestringGame Item Title
descriptionstringGame Item Description
item_codestringGame item Code
statusstringPayment Status
json
{
  "status": "success",
  "code": 200,
  "error": null,
  "data": {
    "type": "payment_transaction",
    "payment_transaction_id": "01JRFDBWZDE9XD17EZGRBPM5K5",
    "reference": "RO-7539449-17442992546349647",
    "game_name": "ragnarok-online-pc",
    "payment_channel": "OOC_TH",
    "amount_cents": 500000,
    "currency": "OOC",
    "title": "500 Cash",
    "description": "Number of cash obtained : 500 Cash",
    "item_code": "RO.500.ooc50",
    "status": "paid"
  }
}