JavaScript Required

BlockMedic requires JavaScript to function properly. Please enable JavaScript in your browser settings and reload the page.

Menu
HTTP API · Version 1

API Documentation

Integrate BlockMedic into your tools, server panels or bots with a simple JSON-over-HTTP API.

Base URLhttps://blockmedic.ampznetwork.com

Quick start

Upload a log with one request. The response contains a shareable link and a token for deleting it later.

curl -X POST https://blockmedic.ampznetwork.com/api/1/log \
  -H "Content-Type: application/json" \
  -H "Origin: https://blockmedic.ampznetwork.com" \
  -d '{ "content": "<your log text>" }'

Authentication

Requests must identify where they come from. This is a basic abuse filter, not a secret: it is not a substitute for protecting your own tokens. Send either:

  • an Origin or Referer header (browsers add one automatically; set it yourself from servers and scripts), or
  • an API key as Authorization: Bearer <key> if you have been issued one.

Deleting a log needs its deletion token. Account endpoints need your session cookie or a Bearer session token.

Errors & limits

Failures return a JSON body like { "success": false, "error": "…" } with one of these status codes. Uploads are rate limited per IP; respect Retry-After when you see a 429 or 503.

StatusMeaningWhen
400Bad requestMissing or invalid fields, e.g. no content, bad gzip, or more than 256 bulk entries.
401UnauthorisedNo Origin or Referer header and no valid API key.
403ForbiddenIP or account is banned, a VPN/proxy was detected, the token is wrong, or the content was held for review.
404Not foundThe log does not exist or has expired.
429Rate limitedToo many uploads. Wait for Retry-After seconds before trying again.
503BusyUnder heavy load or in maintenance. Retry after the Retry-After delay.

Create a log

POST/api/1/log

Uploads a log, anonymises it (IPs, emails) and returns links plus a deletion token. Uploading identical content again returns the existing log instead of a new one.

Request body

FieldTypeDescription
contentStringFull text of the log file. Required
sourceStringIdentifier for your app or tool. Defaults to web, discord or api based on the request.
metadataArrayExtra info as [{"key","value","label","visible"}] objects.
encodingStringSet to "gzip" if content is gzip-compressed and base64-encoded.

Example response

{
  "success": true,
  "id": "WnMMikq",
  "url": "https://blockmedic.ampznetwork.com/log/WnMMikq",
  "raw": "https://blockmedic.ampznetwork.com/api/1/raw/WnMMikq",
  "token": "78351fafe495398...",
  "size": 157369,
  "lines": 1201,
  "errors": 8,
  "created": 1767225600
}
  • Keep the token: it is the only way to delete the log later and is shown once.
  • Duplicate content returns { "success": true, "duplicate": true, "id": "…", "url": "…" } without a token.
  • Responses include X-RateLimit-Remaining and, on 429 or 503, a Retry-After header.

Get log info

GET/api/1/log/:id

Returns details about a log. Add query parameters to include its content.

Query parameters

FieldTypeDescription
contentBooleanInclude every content type below.
rawBooleanInclude the cleaned log text.
parsedBooleanInclude parsed lines with their levels.
insightsBooleanInclude detected problems with solutions.

Example response

{
  "success": true,
  "id": "WnMMikq",
  "source": "web",
  "created": 1767225600,
  "expires": 1769817600,
  "size": 157369,
  "url": "https://blockmedic.ampznetwork.com/log/WnMMikq",
  "raw": "https://blockmedic.ampznetwork.com/api/1/raw/WnMMikq",
  "metadata": [ ... ],
  "content": {
    "raw": "...",
    "parsed": [ ... ],
    "insights": [ ... ]
  },
  "lines": 1201,
  "errors": 8
}

content, lines and errors only appear when at least one query parameter is true.

Delete a log

DELETE/api/1/log/:id

Permanently deletes one log. Authenticate with the token you received when creating it.

Authentication

FieldTypeDescription
AuthorizationHeaderBearer <token>. Alternatively send the token in the body.
tokenStringBody field, used when no Authorization header is sent.

Example response

{
  "success": true
}

Check a log exists

GET/api/1/log/:id/exists

A cheap check for whether a log is still available. Expired logs report false.

Example response

{
  "exists": true
}

Get insights

GET/api/1/insights/:id

A compact diagnostic summary: the detected software, game version and every problem found. No query parameters.

Example response

{
  "success": true,
  "software": "NeoForge 21.1.65",
  "version": "1.21.1",
  "insights": [
    {
      "type": "error",
      "message": "The JVM ran out of heap memory (OutOfMemoryError).",
      "level": 0
    }
  ]
}

type is "error" or "warn".

Raw log text

GET/api/1/raw/:id

Returns the anonymised log as plain text (text/plain). Handy for piping into other tools or printing in a terminal.

Bulk delete

POST/api/1/bulk/log/delete

Deletes up to 256 logs in one request. Each entry needs the log id and its deletion token.

Request body

{
  "logs": [
    { "id": "WnMMikq", "token": "..." },
    { "id": "XyZ123", "token": "..." }
  ]
}

Example response

{
  "success": true,
  "deleted": 2,
  "failed": 0
}

Public statistics

GET/api/1/stats

The numbers behind the status page: totals, recent uploads, daily and hourly activity, and 30-day breakdowns. Results are cached for about 10 seconds.

Example response

{
  "success": true,
  "data": {
    "total": 1204,
    "recent_24h": 38,
    "recent_7d": 211,
    "recent_30d": 802,
    "minecraft_count": 790,
    "hytale_count": 12,
    "top_versions": [ { "name": "1.21.1", "count": 140 } ],
    "breakdown": {
      "versions": [ { "name": "1.21.1", "count": 140 } ],
      "loaders":  [ { "name": "NeoForge", "count": 96 } ],
      "java":     [ { "name": "Java 21", "count": 380 } ],
      "os":       [ { "name": "Windows 11", "count": 301 } ],
      "sources":  [ { "name": "Website", "count": 410 } ]
    },
    "daily":  [ { "date": "2026-10-27", "count": 41 } ],
    "hourly": [ { "hour": "2026-10-27T14:00Z", "count": 3 } ]
  }
}

Breakdown rows may include "kind": "other" or "unknown" for grouped entries.

Service health

GET/api/1/health

A live probe that times a database round-trip and reports whether uploads are being accepted. Never cached, so it is safe to poll for monitoring.

Example response

{
  "success": true,
  "data": {
    "status": "operational",
    "database": { "ok": true, "latency_ms": 114 },
    "uploads": { "accepting": true, "retry_after": 0 },
    "checked_at": 1767225600
  }
}

status is one of "operational", "slow", "degraded" or "down".