{"name":"LunaCore API","version":1,"base_url":"https://lunacore.dev","docs":"https://lunacore.dev/llms.txt","human_docs":"https://api.lunacore.dev/LunaCore","auth":"Reads need nothing. Send \"Authorization: Bearer <key>\" with a personal API key (from your profile's Settings tab) or a staff key for a higher tier and for writes.","tiers":[{"level":1,"name":"Guest","who":"No key and not signed in. Counted per IP address.","limits":{"minute":10,"hour":100,"day":500}},{"level":2,"name":"Registered","who":"Signed in, or sending your personal API key.","limits":{"minute":50,"hour":500,"day":2500}},{"level":3,"name":"Staff","who":"A staff account, or a staff key.","limits":{"minute":100,"hour":1000,"day":5000}}],"endpoints":[{"group":"Products","method":"GET","path":"/api/v1/products","tier":1,"summary":"Every product with its latest version, download totals, report counts and links."},{"group":"Products","method":"GET","path":"/api/v1/products/{slug}","tier":1,"summary":"One product. The slug is case-insensitive, e.g. LunaNPC."},{"group":"Products","method":"GET","path":"/api/v1/products/{slug}/versions","tier":1,"summary":"Release history, planned versions first, then releases newest first, with download links, per-version download counts and what each version requires (\"requires\": Minecraft, loader, libraries, with \"or_newer\"). \"released\" is false for a planned version.","query":{"changelog":"true to include each release's changes, default false","limit":"1-200, default 50"}},{"group":"Products","method":"POST","path":"/api/v1/products/{slug}/versions","tier":3,"summary":"Add a planned version that is not released yet, so reports can already be resolved in it. Publishing that version later releases it.","body":{"version":"string, e.g. 2.0.0"}},{"group":"Products","method":"GET","path":"/api/v1/products/{slug}/versions/{version}","tier":1,"summary":"One release with its changes. Use \"latest\" for the current release."},{"group":"Products","method":"GET","path":"/api/v1/products/{slug}/reference","tier":1,"summary":"The product's mod API reference: types, functions, parameters and enums. Every type, function and field says the version it arrived in (\"since\"); functions carry their \"history\" of signature changes. An archived version lists what changed after it in \"newer_changes\".","query":{"version":"API version or \"latest\" (the default); archived versions are listed in \"versions\"","type":"only this type, e.g. NpcTrade; adds the type's full change history","compact":"true for names, signatures and \"since\" only"}},{"group":"Products","method":"GET","path":"/api/v1/products/{slug}/reference/changes","tier":1,"summary":"What changed in the mod API between versions: every added, changed or removed type, function, field and enum constant, with breaking flags and before/after signatures. No range = the whole history, oldest first.","query":{"version":"only what this version changed, e.g. 0.2.0 or \"latest\"","from":"only changes after this version (use with to for an upgrade path)","to":"only changes up to and including this version","type":"only this type, e.g. NpcRegistry","member":"only this function, field or constant, e.g. getOrCreate","kind":"type | function | field | enum-constant","change":"added | changed | removed","breaking":"true for breaking changes only"}},{"group":"Changelog","method":"GET","path":"/api/v1/changelog","tier":1,"summary":"Changelog entries across every product, newest first. Each change has a tag: Added, Changed, Fixed or Removed.","query":{"product":"product slug, e.g. LunaNPC or LunaCore (the website)","kind":"release (entries with a version) | note (everything else)","since":"ISO 8601 timestamp; only entries published after it","before":"entry id; only older entries, for paging","limit":"1-100, default 20"}},{"group":"Changelog","method":"GET","path":"/api/v1/changelog/{id}","tier":1,"summary":"One changelog entry."},{"group":"Search","method":"GET","path":"/api/v1/search","tier":1,"summary":"Search products, reports, changelog entries and the API reference in one call. Results are grouped by scope.","query":{"q":"2-100 characters, case-insensitive substring match","in":"comma list of products, reports, changelog, api; default all","limit":"1-50 results per scope, default 10"}},{"group":"Reports","method":"GET","path":"/api/v1/reports","tier":1,"summary":"List reports, most recent activity first.","query":{"status":"open (default) | resolved | all","type":"issue | suggestion","product":"product slug, e.g. LunaNPC","since":"ISO 8601 timestamp; only reports created, resolved or commented on after it","limit":"1-200, default 50"}},{"group":"Reports","method":"GET","path":"/api/v1/reports/{id}","tier":1,"summary":"One report with its full description, images, comment thread and events (resolved, reopened, type, priority and title changes), each in time order."},{"group":"Reports","method":"POST","path":"/api/v1/reports/{id}/comments","tier":2,"summary":"Reply on a report. Staff, or the report's author. The author is notified.","body":{"body":"string, the reply text"}},{"group":"Reports","method":"PATCH","path":"/api/v1/reports/{id}","tier":3,"summary":"Rename, re-prioritise, retype, close or reopen a report. Send only the fields to change. Closing notifies the author; with resolved_in it says which version fixes the bug or ships the suggestion.","body":{"title":"string, 3-200 chars","priority":"low | medium | high | emergency","type":"issue | suggestion","status":"open | resolved","resolved_in":"{ product, version } of an existing version, released or planned; null clears it. Needs status resolved"}},{"group":"Account","method":"GET","path":"/api/v1/me","tier":2,"summary":"Which account the request is acting as, and its tier."},{"group":"Account","method":"GET","path":"/api/v1/usage","tier":1,"uncounted":true,"summary":"Your tier, request limits and what is left, plus your AI budget when signed in. Does not count against the limits."}]}