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