Logs and clients
The software log, Connect sign-ins and clients by country.
IP addresses are never returned.
Keep in mind
List logs
POST
https://dev.mod.wtf/api/v2/action
methodget-logs
Read the log of a software: panel actions and key checks, 50 per page.
Body
-
soft_idinteger requiredID of a software you own
-
filterstring optionalAll, success, failed or info
-
qstring optionalText search
-
pageoptionalDefault 1
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-logs",
"soft_id": 123,
"filter": "failed"
}
curl -sS -X POST 'https://dev.mod.wtf/api/v2/action' \
-H 'Content-Type: application/json' \
-d '{
"api_key": "YOUR_API_KEY",
"method": "get-logs",
"soft_id": 123,
"filter": "failed"
}'
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-logs",
"soft_id": 123,
"filter": "failed"
}),
});
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-logs',
'soft_id' => 123,
'filter' => 'failed',
]),
]);
$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-logs",
"soft_id": 123,
"filter": "failed",
},
timeout=10,
)
result = response.json()
{
"ok": true,
"data": {
"logs": [
{
"id": 1,
"action": "serial \"abc\" failed to log in with key \"KEY\"",
"date": "2026-10-26 12:00:00",
"soft": 123,
"event": "connect.denied",
"reason": "key_expired",
"occurrences": 2
}
],
"total": 1,
"page": 1,
"per_page": 50,
"total_pages": 1
}
}
{
"ok": false,
"error": "validation",
"message": "filter must be one of all, success, failed, info"
}
{
"ok": false,
"error": "unauthorized",
"message": "Invalid or missing api_key"
}
List connect logins
POST
https://dev.mod.wtf/api/v2/action
methodget-connect-logins
List Connect sign-ins: serial, key and result.
Body
-
soft_idinteger requiredID of a software you own
-
qstring optionalSerial or key
-
limitinteger optional1-100
-
offsetinteger optionalDefault 0
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-connect-logins",
"soft_id": 123,
"limit": 20
}
curl -sS -X POST 'https://dev.mod.wtf/api/v2/action' \
-H 'Content-Type: application/json' \
-d '{
"api_key": "YOUR_API_KEY",
"method": "get-connect-logins",
"soft_id": 123,
"limit": 20
}'
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-connect-logins",
"soft_id": 123,
"limit": 20
}),
});
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-connect-logins',
'soft_id' => 123,
'limit' => 20,
]),
]);
$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-connect-logins",
"soft_id": 123,
"limit": 20,
},
timeout=10,
)
result = response.json()
{
"ok": true,
"data": {
"total": 1,
"limit": 20,
"offset": 0,
"items": [
{
"id": 1,
"serial": "abc",
"user_key": "KEY",
"success": true,
"login_time": "2026-10-26 12:00:00",
"occurrences": 1
}
]
}
}
{
"ok": false,
"error": "not_found",
"message": "soft not found or not yours"
}
{
"ok": false,
"error": "unauthorized",
"message": "Invalid or missing api_key"
}
List clients
POST
https://dev.mod.wtf/api/v2/action
methodget-clients
Clients by country from successful key checks, and who is online now.
Body
-
soft_idinteger requiredID of a software you own
-
periodstring optional24h, 7d or 30d, default 7d
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-clients",
"soft_id": 123,
"period": "7d"
}
curl -sS -X POST 'https://dev.mod.wtf/api/v2/action' \
-H 'Content-Type: application/json' \
-d '{
"api_key": "YOUR_API_KEY",
"method": "get-clients",
"soft_id": 123,
"period": "7d"
}'
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-clients",
"soft_id": 123,
"period": "7d"
}),
});
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-clients',
'soft_id' => 123,
'period' => '7d',
]),
]);
$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-clients",
"soft_id": 123,
"period": "7d",
},
timeout=10,
)
result = response.json()
{
"ok": true,
"data": {
"soft_id": 123,
"period": "7d",
"countries": [
{
"code": "US",
"count": 12
}
],
"total": 12,
"online": {
"total": 3
}
}
}
{
"ok": false,
"error": "validation",
"message": "period must be one of 24h, 7d, 30d"
}
{
"ok": false,
"error": "unauthorized",
"message": "Invalid or missing api_key"
}