POST Auth Required /api/v1/log/{category}
Log lets trusted Roblox servers send important events to Kiba. Kiba routes each event to the matching log, and moderation events can also be stored as user infractions.
General Flow
- Your game detects an event, a validation issue, or a moderation action.
- The Roblox ServerScript sends a JSON payload to
/api/v1/log/{category}. {category}is one ofserver,ingame, ormoderation.- Kiba routes the event to that category's log and replies with a small JSON confirmation.
Endpoint & Body
All three categories share the same request shape — only {category} in the path changes.
POST https://api.kiba-is-a.top/api/v1/log/{category}
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"event_type": "warning",
"roblox_username": "PlayerName",
"roblox_user_id": 12345678,
"description": "Exploit behavior detected by AntiCheat",
"issued_by": "AntiCheat",
"code": "AB12"
}
| Field | Required | Meaning |
|---|---|---|
event_type | Yes | Short event label, such as boot, warning, player_join, or callback_error. |
description | Yes | Human-readable explanation of what happened. |
roblox_username | No | Affected player's username, usually player.Name. |
roblox_user_id | No | Affected player's Roblox user ID, usually player.UserId. |
issued_by | No | Source of the event: staff name, system name, or script name. |
code | No | Player's 4-character Kiba code. Include it when the event should attach to the linked user. |
A small helper keeps every call consistent across the three categories:
local HttpService = game:GetService("HttpService")
local API_KEY = "YOUR_API_KEY"
local LOG_BASE = "https://api.kiba-is-a.top/api/v1/log/"
local function sendKibaLog(category, payload)
local ok, response = pcall(function()
return HttpService:RequestAsync({
Url = LOG_BASE .. category,
Method = "POST",
Headers = {
["Authorization"] = "Bearer " .. API_KEY,
["Content-Type"] = "application/json"
},
Body = HttpService:JSONEncode(payload)
})
end)
if not ok then
warn("Kiba log request failed: " .. tostring(response))
return false
end
if not response.Success then
warn("Kiba log rejected: " .. tostring(response.StatusCode) .. " " .. response.Body)
return false
end
return true
end
The three categories below are independent logs — each goes to its own destination, which the owner sets up. You can use one, two, or all three. Every entry is labeled so the logs are easy to tell apart.
1. Server Log Server Activity
Records what happens inside the Discord server. Kiba writes most of this automatically — message edits, message deletes, bulk deletes, and member join / leave / ban / unban — across every channel of each whitelisted server. A server is only logged once the owner has whitelisted it; other servers the bot is in are skipped. (Message text appears only when the Message Content intent is enabled.) You can also post your own backend status here.
Call
sendKibaLog("server", {
event_type = "boot",
description = "Roblox server started",
issued_by = game.JobId
})
2. In-Game Log In-Game / Threats
Records in-game player activity and safety detections. The /safety
endpoint writes here on its own whenever a TASE/Rotector check flags a user as
unsafe or review (shown as Threat Detection). Report player
enter/leave here as well, since Kiba can't see Roblox join/leave by itself. If the in-game
log isn't set up, safety detections fall back to the moderation log.
Calls
-- Validation / non-staff event
sendKibaLog("ingame", {
event_type = "callback_parse_error",
description = "Callback response could not be parsed",
issued_by = "PresencePoller"
})
-- Player enter / leave
game.Players.PlayerAdded:Connect(function(player)
sendKibaLog("ingame", {
event_type = "player_join",
roblox_username = player.Name,
roblox_user_id = player.UserId,
description = player.Name .. " entered the game"
})
end)
game.Players.PlayerRemoving:Connect(function(player)
sendKibaLog("ingame", {
event_type = "player_leave",
roblox_username = player.Name,
roblox_user_id = player.UserId,
description = player.Name .. " left the game"
})
end)
3. Moderation Log Admin Report
Records internal moderation — staff or automated enforcement actions. This
log is populated only by what you POST to /log/moderation. When a valid code
is included, the event is also stored as a user infraction, visible in /info.
Call
local function reportModeration(player, action, description, issuedBy)
sendKibaLog("moderation", {
event_type = action,
roblox_username = player.Name,
roblox_user_id = player.UserId,
description = description,
issued_by = issuedBy or "Server",
code = player:GetAttribute("KibaCode")
})
end
reportModeration(player, "warning", "Exploit behavior detected", "AntiCheat")
Out-of-Game Test
curl -X POST https://api.kiba-is-a.top/api/v1/log/moderation \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_type":"warning","roblox_username":"PlayerName","roblox_user_id":12345678,"description":"Exploit behavior detected","issued_by":"AntiCheat","code":"AB12"}'
Success Response
{
"status": "logged",
"category": "moderation"
}
Errors
| HTTP | Cause | Fix |
|---|---|---|
400 | Unknown category or invalid code. | Use server, ingame, or moderation; send 4-character codes only. |
401 | Missing or invalid bearer token. | Check the server-side API key. |
422 | Payload validation failed. | Include event_type and description; keep roblox_user_id positive. |
429 | Rate limit exceeded. | Batch noisy events or slow down repeated reports. |
Rate Limit
POST /log/* allows 30 requests per minute per IP.