Pmmp APIcrash.pmmp.io ↗
Browse, search, and submit PocketMine-MP crash reports via the crash.pmmp.io API. Filter by version, plugin, error type, and more.
What is the Pmmp API?
This API exposes 4 endpoints covering the PocketMine-MP Crash Archive at crash.pmmp.io, letting you list and filter crash reports, retrieve full crash details by ID, and submit new reports. The list_crash_reports endpoint returns up to 50 reports per page with fields like version, plugin, message, involvement, and pagination metadata, making it practical to build monitoring tools or scan for known issues affecting specific PocketMine-MP versions.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/404827ab-e7d0-4f6e-8400-09d317a77703/get_home' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace crash-pmmp-io-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: PocketMine Crash Archive — browse and filter crash reports."""
from parse_apis.pocketmine_crash_archive_api import CrashArchive, Cause, Versioninclude, NotFoundError
client = CrashArchive()
# Fetch archive metadata
info = client.archiveinfos.get()
print(f"Archive: {info.title} — {info.description} ({info.url})")
# List recent crash reports (capped at 5)
for report in client.crashreports.list(limit=5):
print(f"[{report.date}] {report.plugin}: {report.message}")
# Filter by direct plugin involvement
direct = client.crashreports.list(cause=Cause.DIRECT, limit=3).first()
if direct:
print(f"Direct crash: {direct.id} in plugin {direct.plugin}, version {direct.version}")
# Search by error message keyword
for report in client.crashreports.list(message="Class not found", limit=3):
print(f" {report.id} | {report.involvement} | {report.message}")
# Include forked versions in results
for report in client.crashreports.list(versioninclude=Versioninclude.FORKED, limit=3):
print(f" Fork crash: {report.version} is_fork={report.is_fork}")
# Typed error handling
try:
client.archiveinfos.get()
except NotFoundError as exc:
print(f"Not found: {exc}")
print("Exercised: archiveinfos.get / crashreports.list (unfiltered, cause, message, versioninclude)")
Fetches the home page metadata of the PocketMine Crash Archive, returning the site title, description, and base URL.
No input parameters required.
{
"type": "object",
"fields": {
"url": "string, the base URL of the archive",
"title": "string, the site title",
"description": "string, site meta description"
},
"sample": {
"data": {
"url": "https://crash.pmmp.io",
"title": "PocketMine Crash Archive",
"description": "Crash Archive and classifier for PocketMine"
},
"status": "success"
}
}About the Pmmp API
Browsing and Filtering Crash Reports
The list_crash_reports endpoint is the main workhorse. It accepts up to eight filter parameters: page (1-indexed), cause (array accepting 'none', 'indirect', or 'direct' to indicate plugin involvement), plugin (case-sensitive plugin name), jitonly (boolean to isolate JIT-related crashes), message (keyword search against error messages), versions (array of PocketMine-MP version strings such as ['5.43.1']), errortype (partial match on exception or error type), and duplicates (whether to include duplicate reports). Each response includes a reports array with per-report fields — id, date, version, is_modified, is_fork, plugin, message, involvement, and url — plus a pagination object containing current_page, has_next, has_prev, and total_reports_matching.
Retrieving Individual Crash Reports
The get_crash_report endpoint accepts a numeric id and returns the full report object including backtrace, error_message, report_content, and a details object. There is an important access limitation: the majority of detailed reports are restricted to administrator-authenticated sessions. Guest access will receive a 401 Unauthorized response for most individual report lookups. The list_crash_reports endpoint, however, returns summary-level data without authentication requirements.
Submitting Reports and Site Metadata
submit_crash_report accepts the raw report_text (required) along with optional name and email fields, and returns a report_id, status, and url confirming the submission. The get_home endpoint returns the archive's title, description, and base url — useful for verifying connectivity or surfacing attribution metadata in dashboards.
The Pmmp API is a managed, monitored endpoint for crash.pmmp.io — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when crash.pmmp.io changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official crash.pmmp.io API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Scan for crash reports affecting a specific PocketMine-MP version using the
versionsfilter to track upgrade regressions. - Identify which plugins are directly or indirectly involved in crashes by filtering
causeto'direct'or'indirect'. - Build a server monitoring workflow that automatically submits crash dumps via
submit_crash_reportafter a server fault. - Search for crashes matching a known exception type using the
errortypepartial-match filter. - Audit JIT-related instability by toggling
jitonlyto isolate crashes linked to PHP JIT compilation. - Paginate through the full archive using
total_reports_matchingandhas_nextto build a local crash index. - Filter crash history by plugin name to evaluate a third-party plugin's stability track record before installing it.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does crash.pmmp.io have an official developer API?+
Which crash report fields are available without authentication?+
list_crash_reports endpoint returns summary fields — id, date, version, is_modified, is_fork, plugin, message, involvement, and url — without requiring authentication. The get_crash_report endpoint returns full details including backtrace and report_content, but most individual reports are restricted and will return a 401 for guest access.How does pagination work in `list_crash_reports`?+
pagination object in the response includes current_page, has_next, has_prev, and total_reports_matching. Increment the page parameter (1-indexed) and check has_next to determine whether additional pages exist.Can I retrieve comments or discussion threads attached to a crash report?+
Is the `plugin` filter an exact match or a partial search?+
plugin parameter is case-sensitive and performs an exact match on plugin name. The errortype parameter, by contrast, supports partial matching. If you need fuzzy plugin name matching, you can fork this API on Parse and revise the filter logic to accommodate it.