A larp calendar (backend and API).
- Outputs (with filtering)
- RSS
- Email notifications
- Discord bot
- Mastodon account
- Bluesky account
- JSON
- HTML embed
- Exports (with filters, dates etc)
- JSON
- CSV
- XLS?
- iCal
- One admin-token per email address (valid over all events tied to that email)
- Look into websockets for Mina (?)
- How to solve "desktop notices" and app pushes?
Gets all the (published) larps that have one or more dates that are in the future.
Filters can be applied by adding the filters[] query parameter to the call. Multiple filters can be used. The available filters are:
published- If the larp is published (ie publically viewable or not). "Y" or "N", default "Y".from- Get any larps that have one or more dates later or equal to this date (YYYY-MM-DD).to- Get any larps that have one or more dates earlier or equal to this date (YYYY-MM-DD).org- Get larps where organizer matches this string (aLIKE %string%comparison on the backend)countries- Get larps where country matches this 3-letter ISO name (e.gSWE). Multiples can be commaseparated (e.gSWE,NOR,DEN).continent- Get larps from this continent (e.gEurope).
For example: GET /?filters[published]=Y&filters[from]=2024-12-01&filters[countries]=SWE,FIN
More filters may be added.
URL : /
Method : GET
Example return :
Return data example
[
{
"id": 2,
"name": "Another Larp",
"organizers": "Ho Chi HEHE Minh",
"pitch": "In the grim dark future there is only war",
"url": "https://goatse.cx",
"email": null,
"published": "Y",
"cancelled": "N",
"changedAt": "2024-09-16 13:40:28",
"dates": [
{
"date_start": "2024-09-26",
"date_end": "2024-09-27"
}
]
},
{
"id": 1,
"name": "TestLarp",
"organizers": "Godzilla Hårddisksson, Atropos Studios, Jan Bananberg",
"pitch": "THis is a pitch",
"url": "https://www.google.com",
"email": "foo@bar.com",
"published": "Y",
"cancelled": "N",
"changedAt": "2024-09-16 12:10:57",
"dates": [
{
"date_start": "2024-08-22",
"date_end": "2024-08-24"
},
{
"date_start": "2024-10-04",
"date_end": "2021-10-06"
}
]
}
]Gets a single larp based on it's numerical id
URL : /{id}
Method : GET
Payload:
{
"name": "Name of the larp",
"organizers": "Organization 1, Organizer 1, Organizer 2 etc",
"pitch": "A 32767 character pitch for the larp",
"url": "https://verycoollarp.com",
"email": "foo@bar.com",
"countryId": 2,
"dates": [
{
"date_start": "2025-02-02",
"date_end": "2025-02-05"
},
{
"date_start": "2025-02-09",
"date_end": "2025-02-12"
}
],
"tags": [
12, 13, 15
]
}Example return :
Return data example
[
{
"id": 2,
"name": "Mörkrets Gryning - Silversagan, del III: Mörkret Vaknar",
"dates": [
{
"date_start": "2024-11-02",
"date_end": "2024-11-05"
}
],
"organizers": "Hamas, Antifa, Godzilla Hårddisksson",
"pitch": "Riktigt fläskig fantasykampanj. Nu med grottalver!",
"url": null,
"email": null,
"published": "Y",
"cancelled": "N",
"changedAt": "2024-09-18 13:03:18",
"createdAt": "2024-09-18 13:03:18",
"countryId": 167,
"where": {
"name": "Norway",
"iso": "NOR",
"continent": "Europe"
},
"tags": [
{
"id": 5,
"tag": "boffer",
"type": "content",
"description": "Larps that use \"boffer\" weapons for combat, or where that type of combat is an integral part"
},
{
"id": 10,
"tag": "fantasy",
"type": "genre",
"description": "Typically played outdoors, and in various fantasy settings."
}
]
}
]Takes a json body. Requires the X-AUTH-API header to be set. Also returns a token that is to be presented to the user (which they will use to edit/delete/cancel their larp).
URL : /
Method : POST
Example return :
Return data example
{
"larpId": 16,
"token": {
"token": "pODj8ebSeVqmfp3",
}
}Takes a Multipart Form data payload. Requires the form fields file and token. The image must be at least 1024x768px, and will be centercropped and rescaled to produce a 1024x768px image (jpeg, quality=0.85).
URL : /larp/{id}/image
Method : POST
Example return :
Return data example
{
"larpId": 16,
"imageUrl": "https://foo.com/images/16.jpg"
}URL : /tags
Method : GET
Example return :
Return data example
[
{
"id": 1,
"tag": "1920s",
"type": "setting",
"description": null
},
{
"id": 2,
"tag": "1930s",
"type": "setting",
"description": null
},
{
"id": 3,
"tag": "blackbox",
"type": "genre",
"description": "Larps played in very minimalist scenography, often \"blackboxes\" found at theatres"
},
{
"id": 4,
"tag": "blockbuster",
"type": "genre",
"description": "Typically larps set in known intellectual properties and having high production values, fancy venues etc."
},
{
"id": 5,
"tag": "boffer",
"type": "content",
"description": "Larps that use \"boffer\" weapons for combat, or where that type of combat is an integral part"
},
{
"id": 6,
"tag": "chamber larp",
"type": "genre",
"description": "Larps played in small, enclosed spaces (somtimes a single room)."
},
{
"id": 7,
"tag": "cold war",
"type": "setting",
"description": null
},
{
"id": 8,
"tag": "contemporary",
"type": "setting",
"description": "Larps taking place in our current age."
},
{
"id": 9,
"tag": "dystopia",
"type": "setting",
"description": null
},
...
]URL : /countries
Method : GET
Example return :
Return data example
[
{
"id": 1,
"countryCode": "AD",
"countryName": "Andorra",
"isoNumeric": "020",
"north": "42.65604389629997",
"east": "1.7865427778319827",
"continentName": "Europe",
"continent": "EU",
"isoAlpha3": "AND"
},
{
"id": 2,
"countryCode": "AE",
"countryName": "United Arab Emirates",
"isoNumeric": "784",
"north": "26.08415985107422",
"east": "56.38166046142578",
"continentName": "Asia",
"continent": "AS",
"isoAlpha3": "ARE"
},
...