HomeDocsAPI Reference

API Reference

v1

Check votes, post stats, and receive real-time vote webhooks in your bot.

Base URL: https://lamunix.com/api/v11,000 req / hr
🔒
Authentication Required All endpoints (except the widget badge) require Authorization: Bearer bl_your_key. Generate a key from your Dashboard. Keys can be revoked at any time. Max 5 keys per account.

Parameters

idpathintegerreqLamunix numeric bot ID

Response fields

idintegerLamunix internal ID
discordIdstringDiscord application snowflake ID
namestringBot display name
shortDescriptionstringOne-line description
tagsstring[]Category tags
votesintegerAll-time vote count
monthlyVotesintegerVotes this month (resets 1st)
certifiedbooleanLamunix certified status
premiumbooleanPremium status

Example

{
  "id": 42,
  "discordId": "1234567890",
  "name": "My Awesome Bot",
  "shortDescription": "The best bot ever made",
  "tags": ["music", "fun"],
  "votes": 1337,
  "monthlyVotes": 42,
  "certified": false,
  "premium": false
}
401Unauthorized — missing or invalid API key
404Bot not found or not approved
Votes last 12 hours. On Sat & Sun votes count automatically.

Parameters

idpathintegerreqLamunix numeric bot ID
userIdquerystringreqDiscord user snowflake ID to check

Example

{
  "voted": true,
  "votedAt": "2026-03-06T14:22:00.000Z"
}
401Unauthorized
404Bot not found

Request body

guildCountbodyintegerreqTotal guild (server) count
shardCountbodyintegerShard count (optional)

Example

POST /api/v1/bots/42/stats
Authorization: Bearer bl_your_api_key_here
Content-Type: application/json

{
  "guildCount": 15000,
  "shardCount": 4
}
200{ "ok": true }
401Unauthorized
403Forbidden — you do not own this bot
Badges are cached for 5 minutes. No API key required.

Parameters

idpathintegerreqLamunix numeric bot ID
stylequerystringcompact for flat badge; omit for card

Example

<!-- Compact flat badge -->
<img src="https://lamunix.com/api/bots/42/widget.svg?style=compact" alt="My Bot" />

<!-- Full card (default) -->
<img src="https://lamunix.com/api/bots/42/widget.svg" alt="My Bot" />
Configure your URL in Dashboard → Settings → Webhook. Lamunix POSTs on every vote. Respond 2xx within 5 seconds.

Payload fields

botIdstringDiscord bot snowflake ID
userIdstringDiscord user snowflake ID
type"upvote"Event type
isWeekendbooleantrue on Sat/Sun — votes count 2x
votedAtstringISO 8601 vote timestamp

Example payload

{
  "botId": "1234567890",
  "userId": "9876543210",
  "type": "upvote",
  "isWeekend": false,
  "votedAt": "2026-03-06T14:22:00.000Z"
}

Signature verification (Node.js / TS)

Every delivery includes X-BotList-Signature — HMAC-SHA256 of the raw body. Always verify before processing.

import { createHmac, timingSafeEqual } from 'crypto'

function verify(rawBody: string, sig: string, secret: string) {
  const expected = createHmac('sha256', secret)
    .update(rawBody).digest('hex')
  const a = Buffer.from(sig)
  const b = Buffer.from(expected)
  return a.length === b.length && timingSafeEqual(a, b)
}
The raw key value is never returned after initial creation.
200Array of API key objects
401Not authenticated
The plain-text key is returned once only — store it immediately. Maximum 5 keys per account.
201Key created — contains the one-time plaintext value
403Key limit reached (max 5)

Parameters

keyIdpathstringreqID of the key to revoke
200Key revoked successfully
404Key not found
Authenticate with Authorization: Bridge blst_bridge_<key>. Bridge keys are per-bot and separate from your personal API key.

Request body

onlinebodybooleanreqWhether the bot process is currently online
pingMsbodyintegerWebSocket ping latency in ms
guildCountbodyintegerNumber of guilds — also synced to bot profile
shardCountbodyintegerNumber of active shards — also synced to bot profile
memoryMbbodyintegerCurrent RSS memory in megabytes
cpuPercentbodyintegerCPU utilisation 0–100
uptimeSecondsbodyintegerSeconds since bot process last started
errorsLastHourbodyintegerUnhandled errors in the rolling last 60 min
lastCrashAtbodystringISO 8601 timestamp of last crash, or null

Example

POST /api/bridge/heartbeat
Authorization: Bridge blst_bridge_your_key_here
Content-Type: application/json

{
  "online": true,
  "pingMs": 42,
  "guildCount": 15000,
  "shardCount": 4,
  "memoryMb": 312,
  "cpuPercent": 18,
  "uptimeSeconds": 86400,
  "errorsLastHour": 0
}
200{ "ok": true }
401Missing or invalid Bridge key
Errors are surfaced in your bot's dashboard. Uses the same Bridge key auth.

Request body

messagebodystringreqError message — max 2,000 chars
stackbodystringFull stack trace — max 10,000 chars

Example

POST /api/bridge/error
Authorization: Bridge blst_bridge_your_key_here
Content-Type: application/json

{
  "message": "UnhandledPromiseRejection: TypeError: Cannot read properties of undefined",
  "stack": "TypeError: Cannot read properties of undefined\n    at Client.<anonymous> (src/events/messageCreate.js:14:22)"
}
200{ "ok": true }
401Missing or invalid Bridge key
Requires session auth (cookie). Returns only tickets belonging to you.

Response fields

idbodyintegerTicket ID
subjectbodystringTicket subject line
categorybodystringAuto-routed category (e.g. "bot-issue", "billing")
prioritybodystringlow | normal | high | urgent
statusbodystringopen | in_progress | resolved | closed
updatedAtbodystringISO 8601 timestamp of last activity
200Array of ticket objects
401Not authenticated
Tickets are auto-categorised and prioritised. Supply a botId to attach live diagnostics for staff context.

Request body

subjectbodystringreqTicket subject — 5 to 200 chars
bodybodystringreqDetailed description — 10 to 4000 chars
botIdbodyintegerLamunix bot ID — triggers bot diagnostics

Example request

POST /api/support/tickets
Content-Type: application/json

{
  "subject": "Bot votes not counted after voting",
  "body": "Since yesterday votes go through on the site but the count on my bot profile isn't updating. Bot ID is 42.",
  "botId": 42
}

Example response

{
  "id": 17,
  "category": "bot-issue",
  "priority": "high",
  "routing": {
    "team": "bot-support",
    "confidence": 0.91,
    "keywords": ["votes", "not updating"]
  }
}
201Ticket created — returns id, category, priority, and routing info
400Validation error — subject or body out of bounds
401Not authenticated
200{ ticket, messages: [{ id, content, isStaff, isSystem, createdAt, sender? }] }
403Ticket belongs to another user
404Ticket not found
Replying to a resolved ticket will automatically reopen it.

Request body

contentbodystringreqMessage content — 1 to 4000 chars
201Message created — returns the new message object
400Content too short or too long
403Ticket belongs to another user or is closed
400Bad RequestMissing or invalid parameters
401UnauthorizedMissing, invalid, or revoked API key
403ForbiddenYou do not own the requested resource
404Not FoundResource does not exist or is not approved
429Too Many RequestsRate limit exceeded — 1,000 req/hr
500Server ErrorUnexpected internal error

Error shape

{
  "statusCode": 401,
  "message": "Missing API key"
}