Skip to main content

API Reference

Base URL: https://dothack.ainative.studio

Interactive docs: Swagger UI | OpenAPI spec

All endpoints require authentication unless noted otherwise. Include Authorization: Bearer <token> or X-API-Key: <key> in your request headers.


Hackathons

Create hackathon

POST /api/v1/hackathons
FieldTypeRequiredDescription
namestringYesHackathon name
descriptionstringNoDetailed description
start_datedatetimeYesStart date (ISO 8601)
end_datedatetimeYesEnd date (ISO 8601)
statusstringNoDRAFT, LIVE, COMPLETED (default: DRAFT)
locationstringNoPhysical or virtual location
is_onlinebooleanNoWhether it's online (default: false)
max_participantsintegerNoParticipant cap

Get hackathon

GET /api/v1/hackathons/{hackathon_id}

List hackathons

GET /api/v1/hackathons

Query parameters: status, limit, offset


Tracks

Create track

POST /api/v1/hackathons/{hackathon_id}/tracks
FieldTypeRequiredDescription
namestringYesTrack name (e.g., "AI/ML")
descriptionstringNoTrack description
colorstringNoDisplay color (hex)

List tracks

GET /api/v1/hackathons/{hackathon_id}/tracks

Get / Update / Delete track

GET    /api/v1/hackathons/{hackathon_id}/tracks/{track_id}
PATCH /api/v1/hackathons/{hackathon_id}/tracks/{track_id}
DELETE /api/v1/hackathons/{hackathon_id}/tracks/{track_id}

Prizes

Create prize

POST /api/v1/hackathons/{hackathon_id}/prizes
FieldTypeRequiredDescription
namestringYesPrize name
descriptionstringNoPrize details
amountnumberNoMonetary value
currencystringNoCurrency code (USD, EUR)
track_idstringNoRestrict to specific track

List / Get / Update / Delete prizes

GET    /api/v1/hackathons/{hackathon_id}/prizes
GET /api/v1/hackathons/{hackathon_id}/prizes/{prize_id}
PATCH /api/v1/hackathons/{hackathon_id}/prizes/{prize_id}
DELETE /api/v1/hackathons/{hackathon_id}/prizes/{prize_id}

Participants

Join hackathon

POST /api/v1/hackathons/{hackathon_id}/join
FieldTypeRequiredDescription
rolestringYesbuilder, judge, mentor

List participants

GET /api/v1/hackathons/{hackathon_id}/participants

Query parameters: role, limit, offset

Invite judges

POST /api/v1/hackathons/{hackathon_id}/invite-judges

Teams

Create team

POST /api/v1/hackathons/{hackathon_id}/teams
FieldTypeRequiredDescription
namestringYesTeam name
descriptionstringNoTeam description

List / Get / Update / Delete teams

GET    /api/v1/hackathons/{hackathon_id}/teams
GET /api/v1/hackathons/{hackathon_id}/teams/{team_id}
PATCH /api/v1/hackathons/{hackathon_id}/teams/{team_id}
DELETE /api/v1/hackathons/{hackathon_id}/teams/{team_id}

Manage members

POST   /api/v1/hackathons/{hackathon_id}/teams/{team_id}/members
DELETE /api/v1/hackathons/{hackathon_id}/teams/{team_id}/members/{user_id}

Submissions

Create submission

POST /api/v1/hackathons/{hackathon_id}/submissions
FieldTypeRequiredDescription
team_idstringYesTeam UUID
project_namestringYesProject title
descriptionstringNoProject description
track_idstringNoTrack to submit under

Upload file to submission

POST /api/v1/hackathons/{hackathon_id}/submissions/{submission_id}/files
Content-Type: multipart/form-data

List / Get / Update / Delete submissions

GET    /api/v1/hackathons/{hackathon_id}/submissions
GET /api/v1/hackathons/{hackathon_id}/submissions/{submission_id}
PATCH /api/v1/hackathons/{hackathon_id}/submissions/{submission_id}
DELETE /api/v1/hackathons/{hackathon_id}/submissions/{submission_id}

Judging

Submit score

POST /api/v1/hackathons/{hackathon_id}/judging/scores
FieldTypeRequiredDescription
submission_idstringYesSubmission to score
judge_idstringYesJudge's user ID
scoresobjectYesCriteria scores
total_scorenumberYesOverall score
feedbackstringNoWritten feedback

Get leaderboard

GET /api/v1/hackathons/{hackathon_id}/judging/leaderboard

Get judge assignments

GET /api/v1/hackathons/{hackathon_id}/judging/assignments

Rubrics

Create rubric

POST /api/v1/hackathons/{hackathon_id}/rubrics

List / Get / Update / Delete rubrics

GET    /api/v1/hackathons/{hackathon_id}/rubrics
GET /api/v1/hackathons/{hackathon_id}/rubrics/{rubric_id}
PATCH /api/v1/hackathons/{hackathon_id}/rubrics/{rubric_id}
DELETE /api/v1/hackathons/{hackathon_id}/rubrics/{rubric_id}

Get active rubric

GET /api/v1/hackathons/{hackathon_id}/rubrics/active

GET /api/v1/search?query=AI+chatbot&limit=10

Semantic search across all hackathons, submissions, and projects.

GET /api/v1/search/{hackathon_id}?query=machine+learning&track_id=ai-ml

Dashboard

Role-based analytics dashboards:

GET /api/v1/dashboard/organizer     # Organizer stats
GET /api/v1/dashboard/builder # Builder activity
GET /api/v1/dashboard/judge # Judge assignments
GET /api/v1/dashboard/{hackathon_id}/overview # Hackathon overview

Analytics & Export

Get hackathon statistics

GET /api/v1/hackathons/{hackathon_id}/analytics/stats

Export hackathon data

GET /api/v1/hackathons/{hackathon_id}/analytics/export?format=json
GET /api/v1/hackathons/{hackathon_id}/analytics/export?format=csv

Error Format

All errors follow a consistent format:

{
"error": {
"status_code": 404,
"message": "Hackathon not found",
"path": "/api/v1/hackathons/invalid-id"
}
}
StatusMeaning
400Bad request / validation error
401Authentication required
403Forbidden (insufficient role)
404Resource not found
422Validation error (see details)
429Rate limited
500Internal server error
503Upstream service unavailable
504Upstream service timeout