NTP Novi Sad Hackathon

Hackathon API

Read the participants and the published projects from your own code. It's read-only and returns what a signed-in participant already sees on this site: public profiles with no email addresses, and the projects in the gallery.

Get a key

Sign in and open your dashboard. Under API, make a key. It's shown once, lasts a year, and you can replace or revoke it there at any time. Send it on every request:

Authorization: Bearer jjh_…

Call the API from a server or a script and keep the key in an environment variable. Browsers on other sites are blocked by CORS, which is what keeps a key out of page source.

GET /api/participants

Everyone registered for this hackathon who hasn't hidden their profile, newest first.

curl -H "Authorization: Bearer $JJ_KEY" https://hackathon-api.jigjoy.ai/api/participants
{
  "event": "stp-novi-sad-2026",
  "count": 228,
  "participants": [
    {
      "id": "3f2c…",
      "name": "Ana Petrović",
      "bio": "Backend, agents, too much coffee.",
      "techs": ["TypeScript", "Postgres"],
      "avatar": "https://…/avatars/….png",
      "lookingForTeam": false,
      "github": "https://github.com/…",
      "website": "", "linkedin": "", "twitter": "",
      "team": "Night Shift",
      "url": "https://build.jigjoy.ai/participants/3f2c…"
    }
  ]
}

GET /api/projects

The published projects, newest first, each with what its gallery page shows. Add ?edition=build-2026 for the September edition.

curl -H "Authorization: Bearer $JJ_KEY" https://hackathon-api.jigjoy.ai/api/projects
{
  "edition": { "id": "stp-novi-sad-2026", "name": "NTP Novi Sad Hackathon", "status": "live" },
  "count": 12,
  "projects": [
    {
      "slug": "night-shift",
      "project": "Night Shift",
      "team": "Night Shift",
      "description": "…",
      "concurrency": "…",
      "repo": "https://github.com/…",
      "demo": "https://youtu.be/…",
      "deploy": "https://…",
      "images": ["https://…/….png"],
      "likeCount": 4,
      "commentCount": 1,
      "publishedAt": "2026-11-01T10:00:00.000Z",
      "url": "https://build.jigjoy.ai/gallery/night-shift"
    }
  ]
}

Errors

401 means the key is missing, revoked or expired. Errors come back as { "error": "…" }. Be gentle with polling: once a minute is plenty, and the lists change slowly.