Loading…
Loading…
Public, read-only data from the KrackedDevs community. No key, no login. Put it in a calendar, an event site, or an app of your own.
The API is organised around plain HTTPS GET requests that return JSON, plus a calendar feed in iCalendar format for anything that can subscribe to a URL. There is one resource today, events. More will be added here as they open up.
https://krackeddevs.comcurl https://krackeddevs.com/api/eventsconst res = await fetch("https://krackeddevs.com/api/events");
const { events } = await res.json();
const now = Date.now();
const live = events.filter(
(e) => new Date(e.end_date ?? e.start_date).getTime() >= now
);
// live is empty between events. The feed also carries the last 90 days,
// so render events too if you want something on screen year round.There is none. Every endpoint on this page is public and read-only, so there are no API keys to create, rotate or leak. Requests never read cookies, and the response is the same for everyone.
If you are a KrackedDevs member looking for your model API key, that lives in your profile under API Key, and it is a different service from this one.
curl -i https://krackeddevs.com/api/eventsResponses are cached at the CDN: fresh for 5 minutes, then served stale for up to 1 hour while a new copy is fetched. The x-vercel-cache header tells you whether your request was a HIT.
Each IP gets 60 requests per minute across both feed endpoints. Past that you get a 429 in one of two shapes: a JSON body with a retryAfter field and a Retry-After header, or a plain text body with neither. Honour Retry-After when it is there and wait 60 seconds when it is not. The CDN answers everything under the limit, so poll freely within it. If you render the events on your own server, fetch on your side and cache for 5 to 15 minutes.
Do not add query strings. The endpoints take none, and any query string, including a cache buster like ?_=123, is answered with a 308 redirect to the bare path. The redirect carries the same CORS headers as the feed, so an allowlisted browser can follow it, but it is a wasted round trip: the response is already fresh for 5 minutes, so a cache buster buys nothing.
HTTP/2 200
content-type: application/json
cache-control: public, max-age=0
vary: Origin
x-content-type-options: nosniff
x-vercel-cache: HITServer-to-server fetches and calendar apps need nothing. Browser JavaScript on your own domain needs your origin on our CORS allowlist first. Write to us with the origin and we will add it. It is a one-line change on our side.
Allowed origins get GET and HEAD, a 24 hour preflight cache, and Vary: Origin on every response. Credentials are never accepted and JSONP is not offered.
OPTIONS /api/events
Origin: https://your-site.example
HTTP/2 204
Vary: Origin
Access-Control-Allow-Origin: https://your-site.example
Access-Control-Allow-Methods: GET, HEAD
Access-Control-Max-Age: 86400Only GET and HEAD are served; any other method returns 405 with no body. Past 60 requests a minute from one IP you get a 429, JSON or plain text, so check the status before parsing, honour Retry-After when present, and otherwise back off for 60 seconds. A query string on either endpoint returns a 308 to the bare path, never an error.
A 500 means the feed could not be built. The JSON endpoint returns a small error object and the calendar endpoint returns plain text. Keep your last good copy and retry after a minute.
GET /api/events (61st request this minute)
HTTP/2 429
content-type: application/json
retry-after: 21
{ "error": "Too many requests", "retryAfter": 21 }
or, from the edge:
HTTP/2 429
content-type: text/plain; charset=utf-8
Too Many RequestsGET /api/events?_=1725350000
HTTP/2 308
location: /api/events
vary: OriginPOST /api/events
HTTP/2 405HTTP/2 500
content-type: application/json
{ "error": "Internal Server Error" }One public KrackedDevs event. Every field below is present on every event; nullable fields say so. Not included on purpose: attendee counts, capacity, internal registration settings, and any member identifier.
Stable id. Also the calendar UID (slug@krackeddevs.com).
Plain text. May contain line breaks.
One of hackathon, meetup, workshop, webinar, conference, other.
published or completed. Compare start_date and end_date with the current time to tell live from finished.
UTC with offset.
Multi-day events stay listed until they end.
IANA name. Defaults to Asia/Kuala_Lumpur.
Online, a venue string, or null when unknown. Branch on is_online, not on this text.
Empty string or null when there is no separate signup, so check for both. Register through url.
Image. Safe to hotlink.
May be empty.
The event page on krackeddevs.com.
{
"slug": "pesta-kopi-merdeka-2026",
"title": "PESTA KOPI MERDEKA 2026",
"description": "Take your time to browse all the coffee brands participating this year. We are also curating a few working visual artists and creative enterprises.\nMay Ombak KLCC be the place that we are proud of, and may we take our pride to the next level this weekend.\n\n",
"event_type": "meetup",
"status": "published",
"start_date": "2026-08-29T02:00:00+00:00",
"end_date": "2026-08-31T15:00:00+00:00",
"timezone": "Asia/Kuala_Lumpur",
"is_online": false,
"location": "Ombak KLCC",
"registration_url": "https://pestakopi.my",
"banner_url": "https://nxukkhyjasusqbzhkqdv.supabase.co/storage/v1/object/public/events/jt6r8x67rao_1787832669604.png",
"organizer_name": "Tempatan Fest x JOM QR",
"organizer_url": "https://jomqr.my",
"tags": [],
"url": "https://krackeddevs.com/events/pesta-kopi-merdeka-2026"
}Returns every upcoming or ongoing event, plus events from the last 90 days, oldest first. Only events with status published or completed are included. Drafts and cancelled events never appear.
None. The window and ordering are fixed.
An object with generated_at (when this copy was built), count, and events, a list of event objects. Caps: 150 upcoming, 50 past.
curl https://krackeddevs.com/api/events{
"generated_at": "2026-09-03T03:08:07.364Z",
"count": 13,
"events": [
{ ...event },
{ ...event }
]
}The same events as an iCalendar subscription (text/calendar), named KrackedDevs Events. Works with Google Calendar, Apple Calendar, Outlook, and any site that can subscribe to a calendar URL. Same window and caps as the JSON.
A VCALENDAR with one VEVENT per event. The UID is the event slug at krackeddevs.com, so re-fetching updates events in place. Published events carry STATUS:CONFIRMED.
https://krackeddevs.com/api/events/icsBEGIN:VCALENDAR
VERSION:2.0
PRODID:-//KrackedDevs//Events Feed//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:KrackedDevs Events
X-WR-TIMEZONE:Asia/Kuala_Lumpur
BEGIN:VEVENT
UID:pesta-kopi-merdeka-2026@krackeddevs.com
DTSTAMP:20260827T121455Z
DTSTART:20260829T020000Z
DTEND:20260831T150000Z
SUMMARY:PESTA KOPI MERDEKA 2026
DESCRIPTION:Take your time to browse all the coffee brands participating th
is year. We are also curating a few working visual artists and creative en
terprises.\nMay Ombak KLCC be the place that we are proud of\, and may we
take our pride to the next level this weekend.\n\n
LOCATION:Ombak KLCC
URL:https://krackeddevs.com/events/pesta-kopi-merdeka-2026
STATUS:CONFIRMED
END:VEVENT
END:VCALENDAR
<a href="{event.url}">{event.title} on KrackedDevs</a>Every change to the API is listed here, newest first, and larger ones also get a line in the site changelog. Additions are safe to ignore. Removals and renames are announced before they ship.