Software
Read, create, update and delete your software.
Covers every software the account owns: Connect messages, prices, key format and switches.
Keep in mind
statusis yours,soft_statusis notstatusswitches Connect on and off.soft_statusis set by the platform and cannot be changed through the API.- Two sets of texts
err_*fields are the Connect messages,test_err_*the ones for Test Connect.
List software
https://dev.mod.wtf/api/v2/action
methodget-softs
List every software you own.
Body
-
qstring optionalSubstring search
-
limitinteger optionalNumber of records to return, 1..200, default 50
-
offsetinteger optionalNumber of records to skip for pagination
Errors it can return
POST /api/v2/action HTTP/1.1
Host: dev.mod.wtf
Content-Type: application/json
Accept: application/json
{
"api_key": "YOUR_API_KEY",
"method": "get-softs"
}
curl -sS -X POST 'https://dev.mod.wtf/api/v2/action' \
-H 'Content-Type: application/json' \
-d '{
"api_key": "YOUR_API_KEY",
"method": "get-softs"
}'
const response = await fetch("https://dev.mod.wtf/api/v2/action", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"api_key": "YOUR_API_KEY",
"method": "get-softs"
}),
});
const result = await response.json();
$ch = curl_init('https://dev.mod.wtf/api/v2/action');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'api_key' => 'YOUR_API_KEY',
'method' => 'get-softs',
]),
]);
$result = json_decode(curl_exec($ch), true);
import requests
response = requests.post(
"https://dev.mod.wtf/api/v2/action",
json={
"api_key": "YOUR_API_KEY",
"method": "get-softs",
},
timeout=10,
)
result = response.json()
{
"ok": true,
"data": {
"total": 1,
"limit": 50,
"offset": 0,
"items": [
{
"id": 123,
"name": "MyCheats",
"uplink": "Admin",
"status": 1,
"status_reason": "on",
"soft_status": 1,
"key_format": "{NAME}-{RANDOM:8}",
"price": {
"1": "25",
"7": "100",
"30": "300",
"25000": "999"
},
"hwid_reset_limit": 2,
"err_messages": {
"key_not_found": "Key not found!",
"key_on_pause": "Key paused!",
"key_blocked": "Key blocked!",
"expire_key": "Key expired!",
"device_max_slots": "Max devices!"
},
"test_err_messages": {
"key_not_found": "Test key not found!",
"key_on_pause": "Test key paused!",
"key_blocked": "Test key blocked!",
"expire_key": "Test key expired!",
"device_max_slots": "Test max devices!"
},
"template_auto_generate": false,
"emulator_response": "disabled",
"test_emulator_response": "disabled",
"test_connect_enabled": false,
"connect_uuid": "a1b2c3d4e5f6"
}
]
}
}
{
"ok": false,
"error": "unauthorized",
"message": "Invalid or missing api_key"
}
Get software
https://dev.mod.wtf/api/v2/action
methodget-soft
Get software details by ID.
Body
-
soft_idinteger requiredID of a software you own
Errors it can return
POST /api/v2/action HTTP/1.1
Host: dev.mod.wtf
Content-Type: application/json
Accept: application/json
{
"api_key": "YOUR_API_KEY",
"method": "get-soft",
"soft_id": 123
}
curl -sS -X POST 'https://dev.mod.wtf/api/v2/action' \
-H 'Content-Type: application/json' \
-d '{
"api_key": "YOUR_API_KEY",
"method": "get-soft",
"soft_id": 123
}'
const response = await fetch("https://dev.mod.wtf/api/v2/action", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"api_key": "YOUR_API_KEY",
"method": "get-soft",
"soft_id": 123
}),
});
const result = await response.json();
$ch = curl_init('https://dev.mod.wtf/api/v2/action');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'api_key' => 'YOUR_API_KEY',
'method' => 'get-soft',
'soft_id' => 123,
]),
]);
$result = json_decode(curl_exec($ch), true);
import requests
response = requests.post(
"https://dev.mod.wtf/api/v2/action",
json={
"api_key": "YOUR_API_KEY",
"method": "get-soft",
"soft_id": 123,
},
timeout=10,
)
result = response.json()
{
"ok": true,
"data": {
"id": 123,
"name": "MyCheats",
"uplink": "Admin",
"status": 1,
"status_reason": "on",
"soft_status": 1,
"key_format": "{NAME}-{RANDOM:8}",
"price": {
"1": "25",
"7": "100",
"30": "300",
"25000": "999"
},
"hwid_reset_limit": 2,
"err_messages": {
"key_not_found": "Key not found!",
"key_on_pause": "Key paused!",
"key_blocked": "Key blocked!",
"expire_key": "Key expired!",
"device_max_slots": "Max devices!"
},
"test_err_messages": {
"key_not_found": "Test key not found!",
"key_on_pause": "Test key paused!",
"key_blocked": "Test key blocked!",
"expire_key": "Test key expired!",
"device_max_slots": "Test max devices!"
},
"template_auto_generate": false,
"emulator_response": "disabled",
"test_emulator_response": "disabled",
"test_connect_enabled": false,
"connect_uuid": "a1b2c3d4e5f6"
}
}
{
"ok": false,
"error": "not_found",
"message": "soft not found or not yours"
}
{
"ok": false,
"error": "unauthorized",
"message": "Invalid or missing api_key"
}
Update software
https://dev.mod.wtf/api/v2/action
methodedit-soft
Update software fields (allowed fields listed below).
Body
-
soft_idinteger requiredID of a software you own
-
namestring optionalSoftware name, up to 100 characters: Latin letters, digits, spaces, underscores and hyphens. A current name outside this rule still saves while it stays unchanged
-
key_formatstring optionalFor example
{NAME}-{DURATION}-{RANDOM:8} -
statusoptional1 turns Connect on, 0 turns it off and answers with status_reason
-
status_reasonstring optionalOffline message
-
priceobject optionalObject {duration_code: price}
-
hwid_reset_limitinteger optionalHWID resets allowed per key: -1 for unlimited, or 0 to 1000
-
err_key_not_foundstring optionalConnect text for a key that does not exist
-
err_key_on_pausestring optionalConnect text for a paused key
-
err_key_blockedstring optionalConnect text for a blocked key
-
err_expire_keystring optionalConnect text for an expired key
-
err_device_max_slotsstring optionalConnect text for a key whose device slots are all taken
-
test_err_key_not_foundstring optionalTest Connect text for a key that does not exist
-
test_err_key_on_pausestring optionalTest Connect text for a paused key
-
test_err_key_blockedstring optionalTest Connect text for a blocked key
-
test_err_expire_keystring optionalTest Connect text for an expired key
-
test_err_device_max_slotsstring optionalTest Connect text for a key whose device slots are all taken
-
emulator_responsestring optionalMain Connect: disabled, success or a supported emulated error code
-
test_emulator_responsestring optionalTest Connect: disabled, success or a supported emulated error code
-
test_connect_enabledboolean optional0 or 1. When 0, Test Connect returns 404
-
template_auto_generateboolean optional1 issues keys from the default template automatically, 0 turns that off
Errors it can return
POST /api/v2/action HTTP/1.1
Host: dev.mod.wtf
Content-Type: application/json
Accept: application/json
{
"api_key": "YOUR_API_KEY",
"method": "edit-soft",
"soft_id": 123,
"name": "MyCheat",
"err_key_blocked": "Your key is blocked.",
"test_err_key_blocked": "Test key is blocked."
}
curl -sS -X POST 'https://dev.mod.wtf/api/v2/action' \
-H 'Content-Type: application/json' \
-d '{
"api_key": "YOUR_API_KEY",
"method": "edit-soft",
"soft_id": 123,
"name": "MyCheat",
"err_key_blocked": "Your key is blocked.",
"test_err_key_blocked": "Test key is blocked."
}'
const response = await fetch("https://dev.mod.wtf/api/v2/action", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"api_key": "YOUR_API_KEY",
"method": "edit-soft",
"soft_id": 123,
"name": "MyCheat",
"err_key_blocked": "Your key is blocked.",
"test_err_key_blocked": "Test key is blocked."
}),
});
const result = await response.json();
$ch = curl_init('https://dev.mod.wtf/api/v2/action');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'api_key' => 'YOUR_API_KEY',
'method' => 'edit-soft',
'soft_id' => 123,
'name' => 'MyCheat',
'err_key_blocked' => 'Your key is blocked.',
'test_err_key_blocked' => 'Test key is blocked.',
]),
]);
$result = json_decode(curl_exec($ch), true);
import requests
response = requests.post(
"https://dev.mod.wtf/api/v2/action",
json={
"api_key": "YOUR_API_KEY",
"method": "edit-soft",
"soft_id": 123,
"name": "MyCheat",
"err_key_blocked": "Your key is blocked.",
"test_err_key_blocked": "Test key is blocked.",
},
timeout=10,
)
result = response.json()
{
"ok": true,
"data": {
"id": 123,
"name": "MyCheat",
"uplink": "Admin",
"status": 1,
"status_reason": "on",
"soft_status": 1,
"key_format": "{NAME}-{RANDOM:8}",
"price": {
"1": "25",
"7": "100",
"30": "300",
"25000": "999"
},
"hwid_reset_limit": 2,
"err_messages": {
"key_not_found": "Key not found!",
"key_on_pause": "Key paused!",
"key_blocked": "Your key is blocked.",
"expire_key": "Key expired!",
"device_max_slots": "Max devices!"
},
"test_err_messages": {
"key_not_found": "Test key not found!",
"key_on_pause": "Test key paused!",
"key_blocked": "Test key is blocked.",
"expire_key": "Test key expired!",
"device_max_slots": "Test max devices!"
},
"template_auto_generate": false,
"emulator_response": "disabled",
"test_emulator_response": "disabled",
"test_connect_enabled": false,
"connect_uuid": "a1b2c3d4e5f6"
}
}
{
"ok": false,
"error": "not_found",
"message": "soft not found or not yours"
}
{
"ok": false,
"error": "unauthorized",
"message": "Invalid or missing api_key"
}
Create software
https://dev.mod.wtf/api/v2/action
methodcreate-soft
Create extra software. Needs the right from the panel owner; the limit counts software you created.
Body
-
namestring required1-100 characters: Latin letters, numbers, spaces, _ and -
Errors it can return
POST /api/v2/action HTTP/1.1
Host: dev.mod.wtf
Content-Type: application/json
Accept: application/json
{
"api_key": "YOUR_API_KEY",
"method": "create-soft",
"name": "My Second Mod"
}
curl -sS -X POST 'https://dev.mod.wtf/api/v2/action' \
-H 'Content-Type: application/json' \
-d '{
"api_key": "YOUR_API_KEY",
"method": "create-soft",
"name": "My Second Mod"
}'
const response = await fetch("https://dev.mod.wtf/api/v2/action", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"api_key": "YOUR_API_KEY",
"method": "create-soft",
"name": "My Second Mod"
}),
});
const result = await response.json();
$ch = curl_init('https://dev.mod.wtf/api/v2/action');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'api_key' => 'YOUR_API_KEY',
'method' => 'create-soft',
'name' => 'My Second Mod',
]),
]);
$result = json_decode(curl_exec($ch), true);
import requests
response = requests.post(
"https://dev.mod.wtf/api/v2/action",
json={
"api_key": "YOUR_API_KEY",
"method": "create-soft",
"name": "My Second Mod",
},
timeout=10,
)
result = response.json()
{
"ok": true,
"data": {
"id": 124,
"name": "My Second Mod",
"status": 1,
"soft_status": 1
}
}
{
"ok": false,
"error": "forbidden",
"message": "You cannot create software. Ask the panel owner for access."
}
{
"ok": false,
"error": "unauthorized",
"message": "Invalid or missing api_key"
}
Delete software
https://dev.mod.wtf/api/v2/action
methoddelete-soft
Delete software you created. It must be empty: no keys, accounts, domains or files.
Body
-
soft_idinteger requiredID of software you created
Errors it can return
POST /api/v2/action HTTP/1.1
Host: dev.mod.wtf
Content-Type: application/json
Accept: application/json
{
"api_key": "YOUR_API_KEY",
"method": "delete-soft",
"soft_id": 124
}
curl -sS -X POST 'https://dev.mod.wtf/api/v2/action' \
-H 'Content-Type: application/json' \
-d '{
"api_key": "YOUR_API_KEY",
"method": "delete-soft",
"soft_id": 124
}'
const response = await fetch("https://dev.mod.wtf/api/v2/action", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"api_key": "YOUR_API_KEY",
"method": "delete-soft",
"soft_id": 124
}),
});
const result = await response.json();
$ch = curl_init('https://dev.mod.wtf/api/v2/action');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'api_key' => 'YOUR_API_KEY',
'method' => 'delete-soft',
'soft_id' => 124,
]),
]);
$result = json_decode(curl_exec($ch), true);
import requests
response = requests.post(
"https://dev.mod.wtf/api/v2/action",
json={
"api_key": "YOUR_API_KEY",
"method": "delete-soft",
"soft_id": 124,
},
timeout=10,
)
result = response.json()
{
"ok": true,
"data": {
"id": 124,
"deleted": true
}
}
{
"ok": false,
"error": "validation",
"message": "Only empty software can be deleted. Remove its keys, accounts, domains and files first."
}
{
"ok": false,
"error": "unauthorized",
"message": "Invalid or missing api_key"
}
Reset software hash
https://dev.mod.wtf/api/v2/action
methodreset-soft-hash
Generate a new software hash.
Body
-
soft_idinteger requiredID of a software you own
Errors it can return
POST /api/v2/action HTTP/1.1
Host: dev.mod.wtf
Content-Type: application/json
Accept: application/json
{
"api_key": "YOUR_API_KEY",
"method": "reset-soft-hash",
"soft_id": 123
}
curl -sS -X POST 'https://dev.mod.wtf/api/v2/action' \
-H 'Content-Type: application/json' \
-d '{
"api_key": "YOUR_API_KEY",
"method": "reset-soft-hash",
"soft_id": 123
}'
const response = await fetch("https://dev.mod.wtf/api/v2/action", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"api_key": "YOUR_API_KEY",
"method": "reset-soft-hash",
"soft_id": 123
}),
});
const result = await response.json();
$ch = curl_init('https://dev.mod.wtf/api/v2/action');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'api_key' => 'YOUR_API_KEY',
'method' => 'reset-soft-hash',
'soft_id' => 123,
]),
]);
$result = json_decode(curl_exec($ch), true);
import requests
response = requests.post(
"https://dev.mod.wtf/api/v2/action",
json={
"api_key": "YOUR_API_KEY",
"method": "reset-soft-hash",
"soft_id": 123,
},
timeout=10,
)
result = response.json()
{
"ok": true,
"data": {
"id": 123,
"hash": "67c42370550433f0ed"
}
}
{
"ok": false,
"error": "not_found",
"message": "soft not found or not yours"
}
{
"ok": false,
"error": "unauthorized",
"message": "Invalid or missing api_key"
}