Build whatever you want on top of this.
680 open listings from 22 platforms, as JSON, RSS or iCalendar. Every response is served from the same hourly snapshot the website renders from, so a busy consumer costs us one query rather than sixteen.
curl -H "Authorization: Bearer brbl_..." \ "https://brabble.ai/api/listings?hub=hackathons&limit=5"
Get a key, authenticate
Sign in at /dashboard and open Developer settings at the bottom of the page. One click generates a key, shown to you once - copy it somewhere safe. Free, 1,000 requests a day, one key per account. Rotating the key keeps the day's usage - it isn't a way to reset the limit.
Send it as either header - both are checked on every request, neither is deprecated:
Authorization: Bearer brbl_... # or x-api-key: brbl_...
A missing or invalid key returns 401 with a JSON body naming the problem - never a bare status code.
GET /api/listings
One endpoint, sorted by deadline, soonest first. Everything already expired is gone before you see it.
curl -H "Authorization: Bearer brbl_..." \ "https://brabble.ai/api/listings?hub=hackathons&city=indore&limit=5"
Response shape
{
"refreshedAt": "2026-08-15T07:00:00.000Z",
"origin": "store",
"total": 214,
"count": 5,
"offset": 0,
"limit": 5,
"listings": [
{
"id": "...", "title": "...", "organiser": "...",
"type": "HACKATHON", "kind": "competition",
"platform": "Unstop", "url": "...", "shareUrl": "...",
"deadline": "2026-09-01T18:30:00.000Z",
"mode": "ONLINE", "city": "",
"prize": { "label": "See listing", "inr": null },
"team": "1-4", "fee": "Free",
"eligibility": ["Open to all college students"],
"registered": 312
}
],
"attribution": "...", "docs": "..."
}Full field-by-field types and nullability - every field explained on /docs, including the two known gotchas: kind changes what deadline means, and prize.label is often just "See listing" because the upstream source doesn't expose a real prize field.
Query parameters
All optional.
hubhackathons | case-competitions | coding-contests | school-students | college-students
The groupings the site is organised around. school-students and college-students filter on stated eligibility rather than on type.
citydelhi-ncr, indore, hyderabad, pune, …
In-person listings in and around that city. Online listings are excluded, since travelling is the question a city filter answers.
platformunstop, devpost, devfolio, mlh, …
One source platform. The slugs match the /platforms pages.
typeHACKATHON, CASE STUDY, CONTEST, CODING, QUIZ, DESIGN, INNOVATION, COMPETITION
Server-side exact match on the listing's normalised type.
modeONLINE | OFFLINE | HYBRID
How it runs. OFFLINE means there is a venue.
freetrue
Only listings where the organiser states no entry fee.
qany string
Substring match on title and organiser. Case-insensitive.
limit / offset1-200 / 0-100000
limit defaults to 50; a value outside 1-200 is a 400, not a silent clamp. total in the response is the unpaged count, so you can page without guessing.
Errors & rate limits
400bad hub / city / platform / type / mode / free / limit / offset
Any query param outside its allowed set is a 400, not an empty list - a typo that silently returns nothing is how a broken integration ships.
401missing or invalid key
Checked before any query parameter is parsed.
429over 1,000 requests today
Resets at midnight IST. The 429 carries Retry-After and x-ratelimit-reset (both seconds until reset); every /api/listings response carries x-ratelimit-limit, x-ratelimit-remaining and x-ratelimit-reset so you can back off before you hit it.
Full error bodies, headers and one known gap (no WWW-Authenticate on the 401, only a JSON body) are on /docs.
Counts and prize money
The same numbers the prize page publishes, with the caveats attached: the denominator and the rupee-quoted subtotal travel with the total, because the total alone misleads.
curl "https://brabble.ai/api/stats"
RSS and iCalendar
31 feeds in each format, one per facet: everything, per type, per city, per platform. RSS suits bots and newsletters; iCalendar is what a human subscribes to.
https://brabble.ai/rss/hackathons.xml https://brabble.ai/rss/in/delhi-ncr.xml https://brabble.ai/feed/all.ics https://brabble.ai/feed/platforms/unstop.ics
Full list of slugs on the reminders page. RSS items link to our share page rather than straight to the organiser, so a reader arriving from a bot still sees the prize, the deadline and who is running it before they commit.
Widget
If you just want deadlines on a page, skip the API. One iframe, no script, updates itself.
<iframe src="https://brabble.ai/embed/hackathons?limit=5" width="100%" height="291" frameborder="0" loading="lazy"></iframe>
The builder picks the list, the row count and the theme, and shows you the real thing at real size.
Fair use, plainly
Cache what you fetch
The data changes about once a day. Hourly is generous; per-request is wasteful for both of us. Every response carries cache headers that say the same thing.
Send people to the organiser
Registration happens on the platform that runs the competition. Do not build anything that collects entries or fees on their behalf, and do not strip the attribution.
Do not mirror it as your own
Reusing the rows is fine, including commercially. Republishing the whole set as though you assembled it is not, and neither is presenting our figures without the caveats attached to them.
Tell us what you built
Genuinely useful: it tells us which cuts of the data matter, and good ones get linked from here.
Free key, one click, no forms.
Sign in and generate a key from your dashboard whenever you're ready to build. If 1,000 requests a day does not cover what you need, or you need a cut we do not expose, ask. The reliability index shows which of the underlying feeds you can lean on before you build.