Zeony Modding Team Development
API Docs
Introduction
Authentication, base URL, and conventions
Base URL
https://zmtlabs.dev


All responses are JSON. Errors always include an error string field.

Authentication - Most tool endpoints require an active Discord session (log in via /auth/discord). Unauthenticated requests receive {"error": "unauthorized"} with HTTP 401.

Rate limits - No hard rate limits are enforced today, but abusive usage may result in IP blocks.
Public Endpoints
No authentication required
GET /health Health check
Public
Response
{ "status": "ok", "uptime": "3d 4h 12m" }
GET /api Service info
Public
Response
{ "service": "zmtlabs.dev", "running": true, "uptime": "3d 4h 12m", "start_time": 1700000000, "events": 42398, "bot_ready": true }
GET /api/team-status Team online status
Public
Response
{ "bot_ready": true, "members": [ { "discord_id": "123456789", "status": "online" } ] }
GET /api/team-members Full team member list
Public
Returns all team members with their Discord status, avatar, roles, and metadata.
Response
{ "bot_ready": true, "members": [ { "discord_id": "...", "status": "online", ... } ] }
Discord Tools
Discord user / server utilities
GET /api/tools/user-lookup Discord user info
Session required
Query Parameters
NameTypeDescription
idrequiredstringDiscord user snowflake ID
Response
{ "id": "123456789012345678", "username": "user", "global_name": "User", "avatar_url": "https://cdn.discordapp.com/...", "avatar_hq": "https://cdn.discordapp.com/...", "banner_url": "", "banner_color": "#5865f2", "created_at": "Jan 01, 2020", "badges": ["HypeSquad Bravery"], "bot": false }
GET /api/tools/snowflake Decode Discord snowflake
Session required
Query Parameters
NameTypeDescription
idrequiredstringDiscord snowflake ID
Response
{ "snowflake": "123456789012345678", "timestamp_ms": 1579000000000, "created_berlin": "14.01.2020, 17:46:40", "created_utc": "14.01.2020, 16:46:40", "worker_id": 0, "process_id": 1, "increment": 0 }
GET /api/tools/invite Decode invite link
Session required
Query Parameters
NameTypeDescription
coderequiredstringInvite code or full URL
Response
{ "code": "zmtlabs", "guild_name": "Zeony Modding Team", "guild_id": "...", "icon_url": "https://cdn.discordapp.com/...", "member_count": 1200, "online_count": 80, "inviter": { "username": "user" }, "channel": "general", "expires_at": null, "verification_level": 1 }
POST /api/tools/discord/webhook Send test webhook message
Session required
Request Body (JSON)
FieldTypeDescription
urlrequiredstringDiscord webhook URL
modeoptionalstringtext (default) or embed
contentoptionalstringMessage content (text mode)
titleoptionalstringEmbed title (embed mode)
descriptionoptionalstringEmbed description (embed mode)
coloroptionalstringHex color without # (embed mode)
Response
{ "success": true, "status": 204 }
Networking Tools
IP, DNS, WHOIS, ports, and more
GET /api/tools/net/ip IP / geolocation lookup
Session required
Query Parameters
NameTypeDescription
qoptionalstringIP address or hostname. Omit to look up your own IP.
Response
{ "resolved_ip": "1.1.1.1", "country": "Australia", "countryCode": "AU", "regionName": "Queensland", "city": "Brisbane", "isp": "APNIC and Cloudflare DNS Resolver", "org": "APNIC Research", "as": "AS13335 Cloudflare, Inc.", "lat": -27.4766, "lon": 153.0166, "timezone": "Australia/Brisbane" }
GET /api/tools/net/dns DNS record lookup
Session required
Query Parameters
NameTypeDescription
domainrequiredstringDomain name to query
typeoptionalstringRecord type: A, AAAA, MX, TXT, CNAME, NS, SOA, PTR, SRV, CAA, ALL (default: A)
Response
{ "domain": "example.com", "type": "A", "ttl": 3600, "records": ["93.184.216.34"] }
GET /api/tools/net/whois WHOIS lookup
Session required
Query Parameters
NameTypeDescription
qrequiredstringDomain name or IP address
Response
{ "name": "EXAMPLE.COM", "registrar": "ICANN", "creation_date": "1995-08-14", "expiration_date": "2024-08-13", "status": ["clientDeleteProhibited"], "name_servers": ["A.IANA-SERVERS.NET"], "raw": "..." }
GET /api/tools/net/headers Fetch HTTP response headers
Session required
Query Parameters
NameTypeDescription
urlrequiredstringTarget URL (https:// prefix optional)
Response
{ "url": "https://example.com/", "status_code": 200, "reason": "OK", "headers": { "Content-Type": "text/html", ... } }
POST /api/tools/net/portscan TCP port scanner
Session required
Request Body (JSON)
FieldTypeDescription
hostrequiredstringHostname or IP address
portsrequiredstringPort list/range: 80,443,8000-8100
Response
{ "host": "example.com", "ip": "93.184.216.34", "scanned": 3, "open_count": 2, "open_ports": [80, 443] }
GET /api/tools/net/reverseip Reverse IP lookup
Session required
Query Parameters
NameTypeDescription
hostrequiredstringIP address or hostname
Response
{ "host": "1.2.3.4", "domains": ["example.com", "other.com"] }
GET /api/tools/net/iprep IP reputation check
Session required
Query Parameters
NameTypeDescription
qrequiredstringIP address or hostname
Response
{ "ip": "1.1.1.1", "isp": "Cloudflare, Inc.", "org": "APNIC Research", "country": "Australia", "asn": "AS13335 Cloudflare, Inc.", "proxy": false, "hosting": true, "mobile": false }
GET /api/tools/net/asn ASN lookup
Session required
Query Parameters
NameTypeDescription
qrequiredstringIP address or hostname
Response
{ "ip": "1.1.1.1", "asn": "AS13335 Cloudflare, Inc.", "asname": "CLOUDFLARENET", "isp": "Cloudflare, Inc.", "org": "APNIC Research", "country": "Australia", "region": "Queensland", "city": "Brisbane" }
GET /api/tools/net/subdomains Subdomain finder via CT logs
Session required
Queries certificate transparency logs via crt.sh to enumerate known subdomains.
Query Parameters
NameTypeDescription
domainrequiredstringRoot domain (e.g. example.com)
Response
{ "domain": "example.com", "count": 14, "subdomains": ["api.example.com", "mail.example.com", ...] }
Web Tools
SSL, redirects, robots, headers, OG, sitemap, HTTP requests
GET /api/tools/net/ssl SSL certificate info
Session required
Query Parameters
NameTypeDescription
hostrequiredstringHostname (port 443 is assumed)
Response
{ "subject": "CN=example.com", "issuer": "CN=R3, O=Let's Encrypt", "not_before": "Jan 1 00:00:00 2024 GMT", "not_after": "Apr 1 00:00:00 2024 GMT", "sans": ["example.com", "www.example.com"], "serial": "...", "version": 3 }
GET /api/tools/net/redirects Follow redirect chain
Session required
Query Parameters
NameTypeDescription
urlrequiredstringStarting URL
Response
{ "chain": [ { "url": "http://example.com/", "status": 301, "reason": "Moved Permanently" }, { "url": "https://example.com/", "status": 200, "reason": "OK" } ] }
GET /api/tools/net/robots Fetch robots.txt
Session required
Query Parameters
NameTypeDescription
domainrequiredstringDomain name or URL
Response
{ "url": "https://example.com/robots.txt", "status": 200, "content": "User-agent: *\n..." }
GET /api/tools/net/secheaders Security header analysis
Session required
Query Parameters
NameTypeDescription
urlrequiredstringTarget URL
Response
{ "url": "https://example.com/", "status": 200, "headers": { "Strict-Transport-Security": "max-age=...", ... }, "present": 6, "total": 10, "score": 60 }
GET /api/tools/net/cors CORS policy check
Session required
Query Parameters
NameTypeDescription
urlrequiredstringTarget URL
Response
{ "url": "https://example.com/", "status": 200, "cors": { "Access-Control-Allow-Origin": "*" }, "allows_all": true }
GET /api/tools/net/sitemap Fetch sitemap.xml
Session required
Query Parameters
NameTypeDescription
domainrequiredstringDomain name or URL
Response
{ "url": "https://example.com/sitemap.xml", "status": 200, "url_count": 42, "urls": ["https://example.com/", ...] }
GET /api/tools/net/og Open Graph metadata
Session required
Query Parameters
NameTypeDescription
urlrequiredstringTarget URL
Response
{ "url": "https://example.com/", "title": "Example Domain", "description": "...", "image": "https://example.com/og.png", "site_name": "Example", "type": "website", "twitter_card": "summary_large_image", "all": { "og:title": "...", "twitter:card": "..." } }
POST /api/tools/net/httpreq Send HTTP request
Session required
Request Body (JSON)
FieldTypeDescription
urlrequiredstringTarget URL
methodoptionalstringGET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS (default: GET)
headersoptionalobjectCustom request headers as key-value pairs
bodyoptionalstringRaw request body string
Response
{ "url": "https://example.com/", "status_code": 200, "reason": "OK", "time_ms": 142.3, "headers": { "Content-Type": "text/html", ... }, "body": "...", "body_length": 1256 }
Encoding / Hashing
Hash generation
GET /api/tools/hash Generate hashes for text
Session required
Returns MD5, SHA-1, SHA-256, and SHA-512 hashes for the given text.
Query Parameters
NameTypeDescription
textrequiredstringInput text to hash
Response
{ "md5": "5d41402abc4b2a76b9719d911017c592", "sha1": "aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d", "sha256": "2cf24dba5fb0a30e26e83b2ac5b9e29e...", "sha512": "9b71d224bd62f3785d96d46ad3ea3d17..." }
Report
Submit bug reports, support requests, and suggestions
POST /api/report Submit a report
Session required
Sends a Discord embed to the appropriate channel. A confirmation DM is sent to the submitter.
Request Body (JSON)
FieldTypeDescription
typerequiredstringbug, support, or suggestion
titlerequiredstringShort title (max 200 chars)
descriptionrequiredstringDetailed description (max 2000 chars)
Response
{ "success": true }