Skip to main content
OpenMinetopia heeft een ingebouwde HTTP-server. Daarmee vraag je spelers, bankrekeningen, plots en plaatsen op vanuit een website of een eigen tool. Je kunt ook geld storten of opnemen en plotleden aanpassen. De API is bedoeld voor ontwikkelaars. Hij draait op Vert.x en geeft JSON terug.

Aanzetten

De API staat standaard uit. Zet hem aan in config.yml:
1

Kies een sleutel

Vervang CHANGE-ME door een lange, willekeurige sleutel. Iedereen met deze sleutel kan geld storten en opnemen.
2

Zet de API aan

Zet rest-api.enabled op true.
3

Herstart de server

De HTTP-server start alleen bij het opstarten van de plugin. Na een herstart zie je in de console HTTP server started on port 4567 and host 127.0.0.1.
Een nieuwe api-key werkt na /omt reload, omdat de sleutel bij elke request opnieuw wordt gelezen. Voor enabled, host en port moet je de server herstarten. De API hoort bij de module restapi. Staat die in disabled-modules, dan start de API ook niet. Zie Configuratie.
De server spreekt alleen HTTP, geen HTTPS. Moet de API van buitenaf bereikbaar zijn, zet er dan een reverse proxy met HTTPS voor. Anders gaat je API-sleutel onversleuteld over het internet.

Authenticatie

Stuur bij elke request de header X-API-Key mee. De waarde moet precies gelijk zijn aan rest-api.api-key.
Ontbreekt de header of klopt hij niet, dan krijg je status 401 met de platte tekst Unauthorized request. Dat geldt voor elk pad, ook voor paden die niet bestaan.

Antwoorden

Elk antwoord is een JSON-object met success (boolean). Gaat er iets mis, dan staat er ook error (string) in.
Let op twee dingen:
  • De API zet geen Content-Type-header. Parse het antwoord zelf als JSON.
  • Bij de speler-endpoints en bij GET /api/plots is de HTTP-status ook bij een fout 200. Kijk daar dus naar success, niet naar de status.
Tijden zijn Unix-tijdstempels in milliseconden. Een expires_at van -1 betekent dat iets nooit verloopt.

Endpoints

Spelers

Alle speler-endpoints gebruiken de UUID van de speler als {uuid}, met streepjes. Deze fouten gelden voor alle speler-endpoints. De HTTP-status is daarbij 200.

GET /api/player/{uuid}

Geeft de basisgegevens van een speler.

GET /api/player/{uuid}/prefixes

Geeft alle prefixen van een speler. prefixes is een object met het ID van de prefix als sleutel.

GET /api/player/{uuid}/colors

Geeft alle kleuren van een speler. colors is een object met het ID van de kleur als sleutel.

GET /api/player/{uuid}/fitness

Geeft de fitheid van een speler. statistics is een object met het type statistiek als sleutel, zoals WALKING, SPRINTING, CLIMBING, SWIMMING, FLYING, DRINKING, EATING en HEALTH. De request vraagt ook een nieuwe berekening van de fitheid aan.

GET /api/player/{uuid}/criminalrecords

Geeft het strafblad van een speler in het object criminalrecords.
De sleutel van elke regel is in de huidige versie de tekstweergave van het hele record-object, geen ID. Gebruik de sleutel niet om regels terug te vinden. Lees alleen de waarden.

GET /api/player/{uuid}/bankaccounts

Geeft de privérekening van een speler en alle rekeningen waar hij gebruiker van is. accounts is een object met de UUID van de rekening als sleutel. success is false als de speler geen privérekening heeft. accounts staat er dan wel in, met de andere rekeningen.

GET /api/player/{uuid}/plots

Geeft de plots waar een speler eigenaar of lid van is. plots is een object met de naam van de regio als sleutel. Elke plot heeft dezelfde velden als bij GET /api/plots verderop, plus:
In de huidige versie bevat deze lijst ook WorldGuard-regio’s die geen plot zijn, als de speler daar lid van is.

Bankrekeningen

GET /api/bankaccounts/

Geeft alle bankrekeningen als lijst. Let op de / aan het eind van het pad.

GET /api/bankaccount/{uuid}

Geeft één rekening. {uuid} is de UUID van de rekening. De privérekening van een speler heeft dezelfde UUID als de speler.
De velden zijn dezelfde als bij GET /api/bankaccounts/.

GET /api/bankaccount/{uuid}/users

Geeft de gebruikers van een rekening. users is een object met de UUID van de speler als sleutel.

GET /api/bankaccount/{uuid}/transactions

Geeft de transacties van een rekening, de nieuwste eerst.
In de huidige versie schrijft de API uuid en bank_account zonder aanhalingstekens. Het antwoord is daardoor geen geldige JSON en een gewone JSON-parser geeft een fout. Zet de waarden zelf tussen aanhalingstekens voordat je parst, of gebruik deze endpoint nog niet.

Fouten bij één rekening

Deze fouten gelden voor alle endpoints onder /api/bankaccount/{uuid}.

POST /api/bankaccount/{uuid}/deposit

Stort geld op een rekening. Stuur een JSON-body met het bedrag:
Antwoord:

POST /api/bankaccount/{uuid}/withdraw

Neemt geld op van een rekening. De body en het antwoord zijn hetzelfde als bij deposit. Naast de fouten bij één rekening kunnen deze twee endpoints ook geven:
Storten en opnemen via de API controleren niet of een rekening bevroren is. Ze maken ook geen transactie aan in de transactiegeschiedenis.

Plots

Een plot is een WorldGuard-regio. {id} is de naam van de regio. De API zoekt in alle werelden, en alleen in regio’s met een prioriteit van 0 of hoger.

GET /api/plots

Geeft alle plots: regio’s met de flag openmt-plot. plots is een object met de naam van de regio als sleutel.
Gaat er iets mis, dan krijg je success: false met de foutmelding in error, en status 200.

GET /api/plots/{id}

Geeft één regio in het veld plot, met dezelfde velden als hierboven. Deze endpoint controleert niet of de regio de flag openmt-plot heeft.

Eigenaren en leden aanpassen

Stuur de UUID van de speler als JSON-body. Zonder body met uuid mislukt de request.
Antwoord:
Ook deze endpoints controleren niet of de regio een plot is.

Plaatsen

Zie Plaatsen voor wat werelden en steden zijn.

GET /api/places/worlds

Geeft alle geregistreerde werelden.
Bij een fout: status 500 met Failed to retrieve worlds.

GET /api/places/cities

Geeft alle steden. De velden zijn dezelfde als bij werelden, plus:
Bij een fout: status 500 met Failed to retrieve cities.