API
Save a log from a launcher, mod or server panel with one request. You get a link back.
Quick start
Send the log text to https://api.minelog.org and you get a link back. Sending it as plain text means there's nothing to escape, which suits shell scripts and Java mods.
curl --data-binary @latest.log \
-H "Content-Type: text/plain" \
"https://api.minelog.org/v2/logs?source=MyLauncher"A successful upload returns 201 and the details of the saved log:
{
"id": "k7M2xq9D4",
"url": "https://minelog.org/k7M2xq9D4",
"raw": "https://api.minelog.org/v2/logs/k7M2xq9D4/raw",
"source": "MyLauncher",
"kind": "server",
"lines": 1204,
"size": 88012,
"errors": 3,
"warnings": 11,
"privacyApplied": true,
"createdAt": "2026-09-24T10:40:55Z",
"expiresAt": "2027-01-22T10:40:55Z",
"deleteToken": "Vt3mQ8xZk1cR7pLw0aNe5Yf2HbJdUgS4",
"deletableUntil": "2026-09-24T11:40:55Z"
}Open url to see the log. That's the link you give to a player or paste into a support thread.
Basics
Everything is on https://api.minelog.org, separate from the website, so a launcher only needs one short host. Logs are still read on https://minelog.org, and every url in a response points there.
There are two protocols on the same host. /v2 is ours, and it's the one to use for new work. /1 copies the mclo.gs API, so tools written for it work once you change the host. Both use the same storage: a log saved through one opens through the other.
- Requests and responses are UTF-8.
/v2dates are ISO 8601 in UTC. - You can gzip large uploads with
Content-Encoding: gzip. The size limits apply to the unpacked text. - Every endpoint allows cross-origin requests, so a web page can upload straight from the browser.
- You don't need an account or an API key. Limits are per connection.
Limits
These are the same limits the website uses, so anything that uploads there uploads here.
- Largest log
- 15 MBMeasured on the text that gets saved, after private details are hidden. With gzip, the unpacked size is what counts.
- Most lines
- 30,000A log with one very long line counts as one line. The size limit still applies to it.
- Kept for
- 120 daysEvery log deletes itself after this long. You can't extend it.
- Kept for, not hidden
- 48 hoursA log saved with hidePrivate turned off is deleted after this long instead, because nothing was removed from it.
- Delete window
- 60 minutesThe person who saved a log can delete it with its delete token during this time. After that it stays until it expires.
- Uploads
- 70 per minutePer connection. Counted in the database, so it is exact. Reading a log doesn't count.
- Uploads a day
- 300 per dayPer connection, over the last 24 hours. When you reach it, Retry-After tells you when the oldest of those uploads drops out of the count.
- Largest text to analyse
- 5 MBFor the analyse endpoints, which read text without saving it. The line limit is the same 30,000.
- Analyses
- 30 per minutePer connection. Each of our servers counts on its own, so treat it as a fair-use limit and not an exact number.
- Reading findings
- 60 per minutePer connection, for the findings of a saved log. Answers are cached for a minute, and a cached answer never reaches us, so it doesn't count.
- Deleting
- 60 per minutePer connection. A bulk delete counts on its own limit of 10 calls a minute.
Instead of hard coding these numbers, read them from /v2/limits.
Identify your app
Send your app's name as source with each upload. The log page shows it as a small badge, so a player who opens a link from your app can see it came from there. Any name works, there is nothing to sign up for and no list to be on. Every name is shown exactly as you send it, and none is treated differently from another.
- Up to 32 characters.
- Letters and digits from any language, with spaces or
. _ + -between words. Something likeMyLauncherorMy Launcher 2.1. - A name that doesn't fit is ignored, and the log is saved without a badge. It is never an error.
You can also send it in an X-Minelog-Client header, which helps when you can't change the body.
The source isn't verified. Anyone can send any name, so treat the badge as a hint about where a link came from, not a guarantee.
Private details
By default, minelog hides IP addresses, user folder names, tokens and email addresses before saving. Player names stay, because you need them for debugging. The server does this on its own copy, so a client that skips it still can't store private details.
To turn it off, send hidePrivate: false. The log is then saved as sent, privacyApplied is false in the response, and the log page shows a warning to everyone who opens it. Because nothing was removed, it is also deleted after 48 hours instead of 120 days, and expiresAt says so. Leave it on unless you have a reason not to.
Save a log
POST/v2/logs
Saves one log and returns its details. You can send it two ways:
- Plain text. Send
Content-Type: text/plainwith the log as the body. Options go in the query string. - JSON. Send
Content-Type: application/jsonwith an object.
| Name | Type | Needed | What it does |
|---|---|---|---|
content | string | required | The log text. In plain text mode you leave this out and the whole request body is the log. Goes in: JSON body. |
hidePrivate | boolean | default true | Hides IP addresses, MAC addresses, user folder names, tokens and emails before saving. The server does it again on its own copy, so a client that skips it can't leak anything. Turning it off shortens how long the log is kept. Goes in: JSON body or query. |
source | string | optional | The name of the app that is uploading, like MyLauncher. It shows as a badge on the log page. Names that don't fit the rules above are ignored, not treated as errors. Goes in: JSON body, query or X-Minelog-Client header. |
The response is 201 with the fields below. Keep the id if you want to read the log again later.
| Name | Type | What it does |
|---|---|---|
id | string | Nine characters, case sensitive. Ids can't be guessed. |
url | string | The page where people read the log. |
raw | string | The whole log as plain text. |
source | string | null | The source name as saved, or null if none was sent or it was ignored. |
kind | string | What minelog detected: server, client, crash, jvm, yaml, toml, props, json, readme or unknown. |
lines | number | Number of lines saved. |
size | number | Size of the saved text in bytes. |
errors | number | Number of error entries. A whole stack trace counts once. |
warnings | number | Number of warning entries. |
privacyApplied | boolean | False if hidePrivate was turned off for this log. |
createdAt | string | When it was saved, in ISO 8601 UTC. |
expiresAt | string | When it will be deleted, in ISO 8601 UTC. Sooner for logs saved with hidePrivate turned off. |
deleteToken | string | Only in the answer to saving a log, and never shown again: we keep a hash, not the token. Keep it if the log may need deleting. See Delete a log. |
deletableUntil | string | Only in the answer to saving. Until when the token can delete the log, in ISO 8601 UTC. |
This can fail with 400, 413, 422 or 429. See Errors.
Read a log
GET/v2/logs/{id}
Returns the same fields as an upload. Add ?content=true to include the log text in a content field. Without it, the response stays small no matter how big the log is.
If the id doesn't exist or the log has expired, you get a 404:
{
"error": {
"code": "not_found",
"message": "This log doesn't exist or has expired."
}
}Delete a log
DELETE/v2/logs/{id}
Whoever saved a log can delete it in the first 60 minutes. Saving returns a deleteToken once. Send it back in an Authorization: Bearer header. We keep only a hash of it, so keep the token yourself if you want to offer a delete button.
curl -X DELETE https://api.minelog.org/v2/logs/k7M2xq9D4 \
-H "Authorization: Bearer Vt3mQ8xZk1cR7pLw0aNe5Yf2HbJdUgS4"On success you get 200:
{
"id": "k7M2xq9D4",
"deleted": true
}After that the log's page and raw text answer 404. A wrong token gets 403 invalid_token, and once the window is over 403 delete_window_closed. See Errors.
Get the raw text
GET/v2/logs/{id}/raw
Returns the log exactly as saved, as text/plain; charset=utf-8. Useful for piping into other tools. Errors here are still JSON, so check the status code before parsing.
Download as a file
GET/v2/logs/{id}/download
The same text as the raw route, but sent with Content-Disposition: attachment and the file name minelog-{id}.txt. Open it in a browser and the file is saved instead of shown, which is what the Download button on a log page does. The text is the whole log, even for the 15 MB ones, and it is streamed in pieces. Errors are JSON, so check the status code before saving the body.
Read what we found
GET/v2/logs/{id}/insights
Returns what minelog read from a saved log: the game version, loader, Java, launcher and mods, and any known problems with things to try. It works for server logs, client logs, crash reports and Java crash logs. For any other file the lists are empty.
curl https://api.minelog.org/v2/logs/k7M2xq9D4/insightsHere is the answer for a log with a startup line, the Paper banner and an OutOfMemoryError:
{
"kind": "server",
"title": "Paper 1.20.1 Server Log",
"software": {
"id": "paper",
"name": "Paper"
},
"minecraftVersion": "1.20.1",
"environment": {
"gameVersion": {
"value": "1.20.1",
"text": "1.20.1",
"detail": null,
"confidence": "high",
"lines": [
1,
2
],
"others": []
},
"loader": {
"value": "paper",
"text": "Paper build 196",
"detail": "build 196",
"confidence": "medium",
"lines": [
2
],
"others": []
},
"java": null,
"launcher": null,
"conflicts": []
},
"mods": [],
"bundledMods": 0,
"problems": [
{
"id": "out-of-memory",
"message": "Java ran out of the memory it was allowed to use.",
"solutions": [
"On a hosting panel, raise the RAM setting. On your own machine, raise -Xmx in the start command. For example, -Xmx4G allows 4 GB.",
"If it comes back after an hour or two of playing, a mod or plugin may be leaking memory. Remove the ones you added last and test again."
],
"count": 1,
"line": 3
}
]
}| Name | Type | What it does |
|---|---|---|
kind | string | What minelog detected, with the same values as kind on a saved log. |
title | string | A short name, like Paper 1.20.1 Server Log. |
software | object | The id and name of the server software or mod loader the log shows, or Vanilla when it names none. |
minecraftVersion | string | null | The game version, or null when the log doesn't say. |
environment | object | The setup the log states: gameVersion, loader, java and launcher, and a list of conflicts. Each fact is null when the log doesn't say, or an object described below. |
environment.conflicts | string[] | Facts the log states in two conflicting ways. minelog leaves them out instead of guessing, and names them here. |
mods | object[] | Every mod or plugin the log lists, with kind (mod or plugin), name, id, version and the line it is on. Empty for logs that list none. |
bundledMods | number | Mods packed inside other mods, which Fabric counts on its own. They are counted here, not listed. |
problems | object[] | Known problems found in the log, in the order they appear. Described below. |
Facts
gameVersion, loader, java and launcher are each null when the log doesn't say, or an object with these fields:
| Name | Type | What it does |
|---|---|---|
value | string | The raw value, like fabric, 21 or 1.20.1. |
text | string | The same, ready to show people, like Fabric 0.15.7. |
detail | string | null | Extra detail when the log gives it, like a loader version or a Java vendor. |
confidence | string | high when at least two different kinds of source in the log agree, medium when the log says it once. |
lines | number[] | The first few lines it was read from, numbered like the log page. |
others | object[] | Other values the log also states with real weight, each with value and lines. Shown for context, never used to pick the answer. |
Everything is read from lines the game or server wrote itself. Player chat and console commands are skipped, so a line someone types in chat can't show up as a finding. A log that was edited by hand can still fool it, so treat the answer as what the log says, not as proof.
Problems
| Name | Type | What it does |
|---|---|---|
id | string | A stable name for this kind of problem, listed below. Branch on it, not on the message. |
message | string | What is wrong, in plain words. It can name a plugin or a Java version from the log. |
solutions | string[] | What to try, most likely fix first. |
count | number | How many lines of the log showed it. Repeats are counted, not listed again. |
line | number | The first line that showed it. |
The list of known problems is short, and it grows. An empty list doesn't mean the log is healthy. It means none of the known ones showed up. These are the ids today, and an id never changes its meaning:
| Id | What it means |
|---|---|
out-of-memory | Java ran out of heap memory (Java heap space, GC overhead limit exceeded). |
native-thread | Java couldn't create another thread, which is a system limit. |
system-memory | A Java crash log says the computer itself ran out of memory. |
java-version | Something needs a newer Java than the one running it (UnsupportedClassVersionError). |
server-overloaded | The Can't keep up warning showed up at least three times. |
port-bind | The server couldn't use its port (FAILED TO BIND TO PORT). |
client-code-on-server | Forge or NeoForge loaded client-only code on a dedicated server. |
plugin-needs-newer-server | A Bukkit, Spigot or Paper plugin needs a newer API version than the server has. |
damaged-file | A jar can't be opened because it looks damaged or incomplete. |
mixin-failed | A mod failed while changing the game's code with a mixin. |
wrong-loader-mod | A mod file was made for a different loader than the one running it. |
connection-timed-out | A player lost connection because the network timed out. |
server-full | Someone tried to join but the server was full. |
eula-not-accepted | The server won't start because the Minecraft EULA wasn't accepted. |
datapack-load-failed | The server stopped because a data pack couldn't be loaded. |
login-verification-failed | A player's account couldn't be verified, or Mojang's login servers couldn't be reached. |
connection-refused | Nothing answered at the address and port that was tried. |
fabric-dependency | A Fabric mod needs another mod that is missing or the wrong version, or two mods can't be used together. |
forge-dependency | A Forge or NeoForge mod needs another mod that is missing or the wrong version. |
duplicate-mod | The same mod is in the mods folder more than once. |
mod-crashed | A named mod crashed while the game was starting. |
broken-mod-config | A mod's settings file is broken, empty or cut off. |
extracted-mods | A mod was unzipped into the mods folder instead of staying a .jar file. |
jvm-heap-setup | Java couldn't set aside the memory it was asked for at startup. |
jvm-bad-option | Java doesn't know one of the start options it was given. |
graphics-driver | The video driver doesn't offer the OpenGL support the game needs. |
opengl-invalid-operation | The graphics driver rejected something the game drew (OpenGL error 1282). |
native-library-missing | Java couldn't load a helper file the game needs, like lwjgl.dll. |
missing-class | Something looked for a class that isn't there, which points at a mod made for another version. |
java-too-new | Something is too old to run on the Java it was started with. |
plugin-enable-failed | A plugin crashed while the server was switching it on. |
plugin-missing-dependency | A plugin needs another plugin that isn't installed. |
plugin-duplicate | Two files in the plugins folder are the same plugin. |
plugin-broken-file | A file in the plugins folder isn't a working plugin. |
crash-report-saved | The game wrote a crash report, which holds the real cause. |
server-watchdog | The server froze for too long and its watchdog shut it down. |
async-api-call | A plugin called the server from a background thread, which is only allowed on the main thread. |
version-mismatch | A player joined with a game version that doesn't match the server. |
not-whitelisted | A player was turned away because they aren't on the whitelist. |
session-lock | Another program has the world open, or the server can't use its session.lock file. |
proxy-forwarding | Velocity or BungeeCord forwarding is set up wrong between the proxy and the server. |
connection-throttled | A player reconnected too quickly and the server throttled them. |
plugin-event-error | A plugin hit an error while handling a game event. |
mod-set-mismatch | The client and the server don't have the same mods. |
packet-decode-error | A packet was too big, or carried more data than the other side expected. |
client-login-failed | The game couldn't sign in: invalid session, login servers unreachable, multiplayer off or an online ban. |
profile-key-error | The server rejected a player's chat signing key or a signed chat message. |
flying-kick | A player was kicked for flying on a server that doesn't allow flight. |
unknown-host | An address couldn't be looked up (UnknownHostException). |
disk-full | The disk is full, so files can't be written. |
too-many-open-files | The system ran out of open file handles for Java. |
ssl-certificate | Java doesn't trust a site's security certificate (PKIX path building failed). |
world-data-corrupt | A world file, like level.dat, can't be read because it looks damaged. |
ticking-crash | The game crashed while updating an entity, a block entity or the world. |
memory-region-exhausted | Java ran out of Metaspace or direct buffer memory, which sit outside the heap. |
graphics-driver-crash | Java crashed inside a graphics driver file, like nvoglv64.dll or ig9icd64.dll. |
config-yaml-error | A plugin settings file has a YAML formatting mistake. |
database-connection | A plugin couldn't reach its database, was refused, or the database name doesn't exist. |
plugin-already-initialized | A plugin was loaded twice, usually through /reload or a replaced jar. |
not-a-forge-mod | A file in the mods folder has no mods.toml, so Forge or NeoForge skips it. |
server-jar-invalid | Java couldn't open or run the server jar (Unable to access, corrupt, or no main manifest). |
native-crash-exit-code | Windows ended the game after a native crash (exit code 0xC0000409 or 0xC0000005). |
binary-incompatible | IllegalAccessError, AbstractMethodError or IncompatibleClassChangeError between mods or plugins. |
bind-address | The server's server-ip is not an address of this machine (Cannot assign requested address). |
concurrent-modification | ConcurrentModificationException, usually a plugin or mod changing a list from two threads. |
main-class-missing | Java couldn't find the main class, so the game or server never started. |
plugin-task-error | A scheduled task from a plugin threw an error (Task # for Plugin generated an exception). |
registries-failed | A data pack or mod broke the registries (Failed to load registries due to above errors). |
stack-overflow | StackOverflowError, a mod or plugin calling itself in a loop. |
world-newer-version | The world was saved by a newer Minecraft version than the one running. |
duplicate-entity-uuid | Two entities share one UUID and the server dropped one. |
moved-too-quickly | Players repeatedly flagged for moving too quickly or wrongly, usually lag or a movement mod. |
null-pointer | A NullPointerException, with the name of what was null when Java says it. |
resource-pack-failed | A resource pack could not be downloaded or applied. |
unknown-error | An error no rule covers yet, shown with its own line. |
crash-summary | What a crash report or Java crash log says, when no rule covers it. |
Answers are cached for a minute, and reading findings has its own limit, listed under Limits. If the id doesn't exist or the log has expired you get the same 404 as when reading a log.
Analyse without saving
POST/v2/analyse
Reads text the same way and returns the same answer, without saving anything. Use it when a tool wants the findings and has no need for a link. Please don't save a log just to read its findings, that stores data nobody needs.
You can send it two ways, like saving a log: plain text with the log as the body, or JSON with an object.
| Name | Type | Needed | What it does |
|---|---|---|---|
content | string | required | The log text. In plain text mode you leave this out and the whole request body is the log. Goes in: JSON body. |
hidePrivate | boolean | default true | Hides IP addresses, MAC addresses, user folder names, tokens and emails before the text is read, the same step as when saving. Nothing is saved either way. Goes in: JSON body or query. |
curl --data-binary @latest.log \
-H "Content-Type: text/plain" \
https://api.minelog.org/v2/analyseThe answer is 200 with the fields under Read what we found. The text can be up to the analysis size limit in Limits, and a text over it is refused with 413, not cut. Each connection can run 30 a minute. Errors are the ones under Errors.
Read the limits
GET/v2/limits
Returns the current limits, so an app can check a file before trying to upload it:
{
"retentionDays": 120,
"unhiddenRetentionHours": 48,
"maxBytes": 15728640,
"maxLines": 30000,
"uploadsPerMinute": 70,
"uploadsPerDay": 300,
"maxAnalyseBytes": 5242880,
"analysesPerMinute": 30
}Errors
Every /v2 error has the same shape: an error object with a code you can branch on and a message written for people. Show the message to users as is, but don't match on its wording, because it may change.
{
"error": {
"code": "too_many_lines",
"message": "This log has too many lines. The limit is 30,000."
}
}| Code | Status | Meaning |
|---|---|---|
invalid_body | 400 | The body isn't valid JSON or gzip, or isn't text. |
empty_content | 400 | There's no log text to save or analyse. |
not_plain_text | 400 | The content looks like a binary file. Only plain text logs and configs can be shared. |
invalid_option | 400 | An option has the wrong type, like a hidePrivate that isn't true or false. |
not_found | 404 | The log doesn't exist or has expired. |
missing_token | 401 | A delete request had no Authorization: Bearer header. |
invalid_token | 403 | The delete token doesn't match this log. |
delete_window_closed | 403 | The delete window is over. A log can only be deleted in the first 60 minutes after it's saved. |
not_deletable | 403 | The log was saved before deleting existed, so it has no token. It deletes itself on schedule. |
log_too_large | 413 | The log is over the size limit. Analysing has a lower limit than saving, see Limits. |
too_many_lines | 413 | The log is over the line limit. |
blocked_content | 422 | The log contains content we can't host, or reads like an environment file with secrets. For the content filter the message gives the line number and the text around the match, so you know what to remove. |
rate_limited | 429 | Too many uploads, analyses, reads of findings or deletes from this connection. Retry-After tells you how many seconds to wait. |
server_error | 500 | Something broke on our side. Nothing was saved, so it's safe to try again in a moment. |
Rate limits
Each connection can save 70 logs a minute and 300 a day, and analyse 30 a minute. Reading the findings of a saved log and deleting have limits too, listed under Limits. After that you get a 429 with a Retry-After header, in seconds. We count using a keyed hash of the IP address and never store the address itself. Reading a log, its text or its details isn't counted. Everything except saving is counted by each of our servers on its own, so those numbers are fair-use limits, not exact ones.
An app running on a player's own machine is fine, since each player has their own connection. If your service will upload for many people from one server, contact us before you launch so we can plan for it.
mclo.gs compatibility
If your tool already uploads to mclo.gs, you don't need to rewrite it. Change api.mclo.gs to api.minelog.org and keep the /1 paths:
curl -X POST https://api.mclo.gs/1/log \
--data-urlencode "content@latest.log"The response has the shape those tools expect, with a success flag and times in unix seconds:
{
"success": true,
"id": "k7M2xq9D4",
"source": "MyLauncher",
"created": 1790246455,
"expires": 1793702455,
"size": 88012,
"lines": 1204,
"errors": 3,
"url": "https://minelog.org/k7M2xq9D4",
"raw": "https://api.minelog.org/1/raw/k7M2xq9D4",
"metadata": [],
"token": "Vt3mQ8xZk1cR7pLw0aNe5Yf2HbJdUgS4"
}The findings use mclo.gs's shape too. This is GET /1/insights/{id} and POST /1/analyse, and the same lists come back under content.insights when you add ?insights=1 to GET /1/log/{id}:
{
"success": true,
"id": "paper/server",
"name": "Paper",
"type": "Server Log",
"version": "1.20.1",
"title": "Paper 1.20.1 Server Log",
"analysis": {
"problems": [
{
"message": "Java ran out of the memory it was allowed to use.",
"counter": 1,
"entry": {
"level": 3,
"time": null,
"prefix": "[12:00:01 ERROR]:",
"lines": [
{
"number": 3,
"content": "[12:00:01 ERROR]: java.lang.OutOfMemoryError: Java heap space"
}
]
},
"solutions": [
{
"message": "On a hosting panel, raise the RAM setting. On your own machine, raise -Xmx in the start command. For example, -Xmx4G allows 4 GB."
},
{
"message": "If it comes back after an hour or two of playing, a mod or plugin may be leaking memory. Remove the ones you added last and test again."
}
]
}
],
"information": [
{
"message": "Minecraft version: 1.20.1",
"counter": 1,
"label": "Minecraft version",
"value": "1.20.1",
"entry": {
"level": 6,
"time": null,
"prefix": "[12:00:00 INFO]:",
"lines": [
{
"number": 1,
"content": "[12:00:00 INFO]: Starting minecraft server version 1.20.1"
}
]
}
},
{
"message": "Server software: Paper build 196",
"counter": 1,
"label": "Server software",
"value": "Paper build 196",
"entry": {
"level": 6,
"time": null,
"prefix": "[12:00:00 INFO]:",
"lines": [
{
"number": 2,
"content": "[12:00:00 INFO]: This server is running Paper version git-Paper-196 (MC: 1.20.1) (Implementing API version 1.20.1-R0.1-SNAPSHOT)"
}
]
}
}
]
}
}Errors use the same flat shape rather than the /v2 one:
{
"success": false,
"error": "This log is too large."
}A few things can't match. This is every mclo.gs endpoint and where it stands:
| Endpoint | Status | Notes |
|---|---|---|
POST /1/log | Supported | Accepts JSON or form encoding, with content and source. metadata is accepted and ignored, and the response has an empty list. The response has a token field, the delete token, which is shown once. Times are unix seconds. |
GET /1/log/{id} | Supported | Same fields as the upload response, without the token. Three switches add a content object: ?raw=1 for content.raw (the text), ?parsed=1 for content.parsed (the log as entries) and ?insights=1 for content.insights (problems and information). They combine, and without any of them there is no content field. 1, true and any other value except 0 and false switch one on. |
GET /1/raw/{id} | Supported | The whole log as plain text. |
GET /1/limits | Supported | storageTime in seconds, maxLength in bytes and maxLines, with our numbers. |
GET /1/filters | Different | Always an empty list. minelog doesn't ask clients to trim or rewrite logs. It only hides private details on its own side. |
DELETE /1/log/{id} | Supported | Send the token from the upload as Authorization: Bearer <token>. It works for 60 minutes after saving, then answers 403. Returns { "success": true }. |
POST /1/bulk/log/delete | Supported | A JSON list of { id, token }, up to 256 entries. The answer is 207 with one result per log, each with its own status, so a wrong token or an old log only fails that entry. A list that is empty, too long or malformed is refused whole with 400, and nothing is deleted. Each log follows the 60 minute delete window. |
GET /1/insights/{id} | Different | Same shape as mclo.gs: name, type, version, title and analysis with problems and information. The details differ: minelog reads more facts (loader, Java, launcher, mods) into information, and its problems list is shorter and pattern-based rather than exhaustive, so it can come back empty on a log mclo.gs would flag something on. Entries show at most 40 lines each. |
POST /1/analyse | Different | Reads text without saving it, JSON or form encoded, with content. The answer has the same shape as insights. Private details are hidden before reading, the text can be up to 5 MB, and a text over the limit is refused, not cut. The entries list mclo.gs adds at the top level isn't sent. Ask GET /1/log/{id}?parsed=1 for entries of a saved log. |
/1/limits returns our numbers in the units mclo.gs uses:
{
"storageTime": 10368000,
"maxLength": 15728640,
"maxLines": 30000
}Our limits differ from theirs. A tool that reads /1/limits before uploading picks ours up by itself. One that hard codes the mclo.gs numbers stays inside them, which always fits.
Stability
What you can count on for /v2:
- We can add new fields to a response at any time. If your client ignores fields it doesn't know, nothing breaks.
- Changes that would break a working client go into a new version,
/v3./v2keeps working alongside it. - The
/1paths follow mclo.gs. If they add something we'll look at it, but we can't promise the same day. - Logs are deleted after 120 days, whichever protocol saved them. Only a
/v2log saved withhidePrivate: falseis deleted sooner.