API
Hackathons and stats
Fetch a single hackathon, export a filtered hackathon CSV, and read the stats, trends, geographic and prize pool endpoints
These endpoints read the hackathon database: one hackathon by id, a filtered CSV export, and four market stats endpoints. All of them need an API key. See Authentication and keys.
Fetch one hackathon
GET /api/hackathons/{id} returns one hackathon with its sponsors, organizers and quality score. {id} is either the UUID or the slug from the hackathon's page URL (/database/hackathon/<slug>).
curl https://www.hackathonradar.com/api/hackathons/treeline-hacks \
-H "Authorization: Bearer $HACKATHONRADAR_API_KEY"{
"id": "6fa487e4-c891-456f-81f1-2a4bedc12967",
"slug": "treeline-hacks",
"title": "TreeLine Hacks",
"start_at": "2026-03-06T16:45:00.000Z",
"end_at": "2026-03-08T16:45:00.000Z",
"timezone": "America/Los_Angeles",
"type": "online",
"categories": ["AI/ML", "Sustainability"],
"prize_pool": 5000,
"prize_currency": "USD",
"prize_pool_usd": 5000,
"city": null,
"country": null,
"website_url": "https://treelinehacks.example.com",
"registration_url": "https://treelinehacks.example.com/register",
"participant_count": 250,
"student_only": false,
"data_quality_score": 85,
"is_deleted": false,
"sponsors": [{ "id": "...", "name": "Acme Cloud", "domain": "acme.com", "email": null }],
"organizers": [{ "id": "...", "name": "Treeline Hacks", "email": "team@treelinehacks.example.com", "email_confidence": 0.92 }],
"quality_score": { "score_total": 55, "confidence": 0.81, "score_version": "v2", "breakdown_json": {}, "reasons_json": [], "computed_at": "..." }
}An unknown id returns 404 Hackathon not found.
The hackathon object
| Field | What it holds |
|---|---|
id, slug | UUID and URL slug. Both work as {id} |
title | Event name |
start_at, end_at, timezone | ISO 8601 timestamps and the event's time zone, any of which can be null |
type | online, in-person or hybrid |
categories | Array of category tags, or null |
prize_pool, prize_currency, prize_pool_usd | Prize pool as listed, its currency, and the USD conversion |
cash_prizes | Whether prizes include cash |
venue_name, address, city, country, lat, lng | Location, null for online events |
website_url, registration_url | Event links, usually on the platform the event is hosted on |
participant_count | Registered or reported participants, when known |
student_only, vibe_code_friendly | Booleans, null when unknown |
travel_support | Covered, Partial, Not Covered, Unknown, or null |
description, description_html, description_markdown, description_plain_text | The event description in each format we hold |
language | Language of the listing |
data_quality_score | Completeness score from 0 to 100 |
first_seen_at, last_seen_at | When HackathonRadar first and last saw the listing |
featured | Whether the event is a featured listing |
audience_profile | Estimated audience profile, or null. See Audience profiles |
is_deleted, deleted_at | Whether the listing has been removed, and when |
sponsors | Array of sponsor records: id, name, domain, website_url, logo_url, twitter, linkedin, email, email_confidence |
organizers | Array of organizer records: id, name, domain, website_url, twitter, linkedin, instagram, image_url, email, email_confidence |
quality_score | The event's quality score: score_total, confidence, computed_at and supporting detail, or null. See Quality scores |
The response can include other fields. Only the fields in this table are supported, so do not build on the rest.
Export hackathons as CSV
There is no JSON list or search endpoint for hackathons. To pull many at once, use GET /api/hackathons/export, which returns a CSV file (hackathons-export-YYYY-MM-DD.csv).
| Parameter | Effect |
|---|---|
search | Text match on title, description, venue, city and country |
type | online, in-person or hybrid. Other values are ignored |
category | Exact category tag, such as AI/ML |
country | Exact country name as stored, such as United States |
studentOnly=true | Student-only events |
upcoming=true, ongoing=true, active=true, ended=true | Date windows. active means upcoming or ongoing |
columns | Comma-separated column keys to include |
curl "https://www.hackathonradar.com/api/hackathons/export?active=true&type=in-person&country=United%20Kingdom&columns=title,start_at,end_at,city,prize_pool,organizers,primary_organizer_email,website_url" \
-H "Authorization: Bearer $HACKATHONRADAR_API_KEY" \
-o hackathons.csvColumn keys: title, description, type, start_at, end_at, duration, participant_count, prize_pool, location, city, country, organizers, primary_organizer_email, categories, sponsors, student_only, cash_prizes, vibe_code_friendly, travel_support, language, timezone, venue_name, address, website_url, first_seen_at, last_seen_at. Columns always come out in this order, whatever order you pass.
CSV values are formatted for reading: dates as DD/MM/YYYY, website_url as the bare domain, prize_pool as 5,000 USD, student_only and cash_prizes as Yes or No, and lists joined with ; .
Stats endpoints
All four are GET requests that return JSON computed across the whole database. The figures refresh about once an hour.
| Endpoint | Returns |
|---|---|
/api/stats | The full stats object: counts (upcoming, ongoing, ended, total, newThisWeek), categories, last30Days, prizePool, geographic, timeSeries, categoryAnalytics, participants, dataQuality and generatedAt |
/api/stats/trends | timeSeries, categoryAnalytics (top 20 mostPopularCategories and categoriesByPrizePool), basicStats and generatedAt |
/api/stats/geographic | geographic: totalCountries, totalCities, hackathonsByCountry, hackathonsByCity (top 50), typeDistribution, topCountries (top 10), plus generatedAt |
/api/stats/prize-pools | prizePool (total, average, median and max in USD, totals by format, events with and without prizes) and timeSeries (prizePoolsOverTime, monthlyTrends, weeklyTrends, growthRate), plus generatedAt |
On /api/stats/trends and /api/stats/prize-pools, timeRange (week, month, quarter, year or all) sets the window for the time series. It defaults to year on trends and all on prize pools.
curl "https://www.hackathonradar.com/api/stats/trends?timeRange=quarter" \
-H "Authorization: Bearer $HACKATHONRADAR_API_KEY"Percentage fields (percentage and growthRate) are already percentages, so 22.4 means 22.4%. Money values are in USD. generatedAt is when the figures were computed, so use it to label charts ("as of ...").