Skip to listings
Developers
API livev1 (unversioned URL) · refreshed hourly

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"
Step 1

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:

headers
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.

Step 2

GET /api/listings

One endpoint, sorted by deadline, soonest first. Everything already expired is gone before you see it.

curl
curl -H "Authorization: Bearer brbl_..." \
  "https://brabble.ai/api/listings?hub=hackathons&city=indore&limit=5"

Response shape

200 · application/json
{
  "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.

Reference

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.

Reference

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.

Also available

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
curl "https://brabble.ai/api/stats"
Also available

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.

feed urls
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.

Also available

Widget

If you just want deadlines on a page, skip the API. One iframe, no script, updates itself.

html
<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.

Terms

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.

For the friend who builds Telegram bots